【发布时间】:2021-09-28 13:06:03
【问题描述】:
如何防止在 C# 中使用其命名空间之外的类?
例如,我有两个命名空间。一个定义了一个数据模型类,另一个定义了一个继承第一个的数据模型类。第二个命名空间还定义了一个实用程序类,它是唯一允许使用第二个数据模型类的类..
namespace A
{
public class ModelA {} // can be used by any class
}
namespace B
{
class ModelB : ModelA {} // can only be used by Utility
public class Utility
{
public void DoSomething()
{
var item = new ModelB {};
...
}
}
}
通过在另一个类库或项目中实现以下代码,我想要cmets指示的效果...
namespace C
{
public class Stuff
{
public void DoThings()
{
var a = new ModelA(); // this should work
var b = new ModelB(); // this should not work
}
}
}
【问题讨论】:
-
将 ModelB 设为 Utility 中的私有类。
-
进一步测试了这一步,我意识到我刚刚对帖子所做的更改可能是正确的。类的默认访问修饰符是内部的,所以这应该可以工作。
-
你想阻止 Utility 使用 ModelA,对吧?
-
@dzianis-karpuk 不。代码 cmets 解释了应该访问的内容。
-
@MattW
internal限制为相同的程序集。含义:不能从其他程序集访问该类,但可以从同一程序集的其他命名空间访问该类。这可能是你想要的,但不是你所要求的。
标签: c# namespaces access-modifiers