参见英文答案 >
What’s the difference between a public constructor in an internal class and an internal constructor?4个
我看到一些C#代码声明一个带有内部修饰符的类,并带有一个公共构造函数:
我看到一些C#代码声明一个带有内部修饰符的类,并带有一个公共构造函数:
internal class SomeClass { public SomeClass() { } }
如果整个类的可见性是内部的,那么拥有一个公共构造函数是什么意思,那么只能在定义的组件中看到?
另外,SomeClass是否是嵌套类,这样做有任何意义吗?
解决方法
内部类的作用域覆盖公共的MyClass()构造函数范围,使构造函数为内部.
在构造函数上使用public可以使以后更容易地将类更新为public,但会混淆意图.我不这样做
编辑3:我错过了你的一部分问题.如果你的班级是嵌套的,这样做还不错即使嵌套在一个公共类中的私有类中也不会有什么区别(见C# language specification – 3.5.2 Accessibility domains).
编辑:如果我记得,如果ctor是内部的,那么它不能被用作一个通用类型,在那里有一个约束条件,要求T:new(),这将需要一个公共构造函数(参考C# language specification (version 4.0) – 4.4.3 Bound and unbound types).
编辑2:代码示例演示上述
class Program { internal class InternalClass { internal InternalClass() { } } internal class InternalClassPublicCtor { public InternalClassPublicCtor() { } } internal class GenericClass<T> where T : new() {} static void Main(string[] args) { GenericClass<InternalClass> doesNotCompile = new GenericClass<InternalClass>(); GenericClass<InternalClassPublicCtor> doesCompile = new GenericClass<InternalClassPublicCtor>(); } }