如何防止从命名空间内访问 class?

How to prevent access to a class from within a namespace?

如何防止在 C# 的命名空间之外使用 class?

例如,我有两个命名空间。一个定义数据模型 class,另一个定义继承第一个的数据模型 class。第二个命名空间还定义了一个实用程序 class,它是唯一被允许使用第二个数据模型 class..

的 class
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 {};
            ...
        }
    }
}

通过在另一个class库或项目中实现以下代码,我想要评论中指出的效果...

namespace C
{
    public class Stuff
    {
        public void DoThings()
        {
            var a = new ModelA(); // this should work
            var b = new ModelB(); // this should not work
        }
    }
}

您不能将 private 访问修饰符添加到 class 直接包含在命名空间中的元素。

但是您可以将 ModelB 设为私有嵌套 class:

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

之外访问它