【发布时间】:2009-01-19 09:46:52
【问题描述】:
我想密封命名空间中的类。我正在查看“内部”访问修饰符,但这似乎只是在程序集中密封类。我可以在命名空间中密封类吗?
或者我必须将东西移动到单独的程序集中吗?但是我会遇到Visual Studio拒绝循环程序集引用的问题。
【问题讨论】:
标签: c#
我想密封命名空间中的类。我正在查看“内部”访问修饰符,但这似乎只是在程序集中密封类。我可以在命名空间中密封类吗?
或者我必须将东西移动到单独的程序集中吗?但是我会遇到Visual Studio拒绝循环程序集引用的问题。
【问题讨论】:
标签: c#
不,没有特定于命名空间的修饰符。一种选择是使用继承和“受保护”修饰符,但在基类上有一个内部构造函数,这样外部代码就不能对其进行子类化。这可能会有所帮助。
【讨论】:
这在 C# 中是不可能的。
命名空间级成员只能是public 或internal
但是,您可以在 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!
}
}
}
【讨论】:
您仍然可以使用 internal 关键字并通过 AssemblyInfo.cs 文件中的 InternalsVisibleTo 属性将内部类公开给另一个程序集。
【讨论】: