分享
三行代码  ›  专栏  ›  技术社区  ›  Matt W

如何防止从命名空间中访问类?

  •  0
  • Matt W  · 技术社区  · 6 天前

    如何防止类在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 {};
                ...
            }
        }
    }
    

    通过在另一个类库或项目中实现以下代码,我希望注释所指示的效果。。。

    namespace C
    {
        public class Stuff
        {
            public void DoThings()
            {
                var a = new ModelA(); // this should work
                var b = new ModelB(); // this should not work
            }
        }
    }
    
    1 回复  |  直到 6 天前
        1
  •  0
  •   Franz Gleichmann    6 天前

    您不能添加 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