【问题标题】:C# internal access modifiersC# 内部访问修饰符
【发布时间】:2009-01-19 09:46:52
【问题描述】:

我想密封命名空间中的类。我正在查看“内部”访问修饰符,但这似乎只是在程序集中密封类。我可以在命名空间中密封类吗?

或者我必须将东西移动到单独的程序集中吗?但是我会遇到Visual Studio拒绝循环程序集引用的问题。

【问题讨论】:

    标签: c#


    【解决方案1】:

    不,没有特定于命名空间的修饰符。一种选择是使用继承和“受保护”修饰符,但在基类上有一个内部构造函数,这样外部代码就不能对其进行子类化。这可能会有所帮助。

    【讨论】:

    • ...毕竟如果有办法限制命名空间,人们仍然可以在他们的代码中定义相同的命名空间并以这种方式继承...
    【解决方案2】:

    这在 C# 中是不可能的。

    命名空间级成员只能是publicinternal

    但是,您可以在 C# 中使用嵌套类

    namespace A {
        public class B {
    
            protected class C { }
        }
    
        public class D {
    
            void E() {
                var F = new A.B();    // ok!
                var G = new A.B.C();  // error!
            }
        }
    }
    

    【讨论】:

      【解决方案3】:

      您仍然可以使用 internal 关键字并通过 AssemblyInfo.cs 文件中的 InternalsVisibleTo 属性将内部类公开给另一个程序集。

      【讨论】:

      • 除了 [InternalsVisibleTo] 仍处于程序集级别,而不是命名空间级别。
      • 确实如此。但据我所知,没有办法在命名空间级别做到这一点?
      猜你喜欢
      • 1970-01-01
      • 2010-12-24
      • 1970-01-01
      • 2017-11-11
      • 2011-04-18
      • 2011-10-22
      • 1970-01-01
      相关资源
      最近更新 更多