如何防止从命名空间内访问类?
Posted
技术标签:
【中文标题】如何防止从命名空间内访问类?【英文标题】:How to prevent access to a class from within a namespace? 【发布时间】: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 解释了应该访问的内容。 @MattWinternal
限制为相同的程序集。含义:不能从其他程序集访问该类,但可以从同一程序集的其他命名空间访问该类。这可能是你想要的,但不是你所要求的。
【参考方案1】:
您不能将private
访问修饰符添加到直接包含在命名空间中的类。
但是,您可以将 ModelB
设为私有嵌套类:
namespace A
class ModelA // can be used by any class
namespace B
class Utility
private class ModelB : ModelA // can only be used by Utility
public void DoSomething()
var item = new ModelB ;
...
这意味着,与任何其他私有财产一样,它不能在Utility
-class 之外访问
【讨论】:
谢谢 - 您如何看待发布代码的更新?以上是关于如何防止从命名空间内访问类?的主要内容,如果未能解决你的问题,请参考以下文章