内部类的公共构造函数意味着什么

我已经看到一些C#代码声明了一个带有internal修饰符的类,带有一个public构造函数:

 internal class SomeClass { public SomeClass() { } } 

如果整个类的可见性是内部的,那么拥有公共构造函数有什么意义呢?因此只能在定义程序集中看到它?

另外,如果SomeClass是嵌套类,这是否有意义?

internal class范围覆盖public MyClass()构造函数范围,使构造函数internal

在构造函数上使用public可以更轻松地将类更新为public ,但会混淆intent。 我不这样做。

编辑3:我错过了你的部分问题。 如果您的类是嵌套的,那么这样做仍然很好。 嵌套不会有任何区别,即使它嵌套在…中的公共类中的私有类中(参见C#语言规范 – 3.5.2可访问性域 )。

编辑:而且,如果我记得,如果ctor是internal ,它不能用作generics类型,其中有一个约束要求where T : new() ,这将需要一个public构造函数(参考C#语言规范(版本4.0) – 4.4.3绑定和未绑定类型 )。

编辑2:代码示例演示以上内容

 class Program { internal class InternalClass { internal InternalClass() { } } internal class InternalClassPublicCtor { public InternalClassPublicCtor() { } } internal class GenericClass where T : new() {} static void Main(string[] args) { GenericClass doesNotCompile = new GenericClass(); GenericClass doesCompile = new GenericClass(); } } 

从MSDN – 访问修饰符(C#编程指南) :

通常,成员的可访问性不大于包含它的类型的可访问性。 但是,如果成员实现接口方法或覆盖在公共基类中定义的虚方法,则可以从程序集外部访问内部类的公共成员。

因此,例如,如果您有公共接口的内部实现,您仍然可以将某些成员公开为public。

另外,假设您突然希望内部类是公开的。 简单地更改类上的访问修饰符要比所有成员容易得多。

internal关键字是类型和类型成员的访问修饰符。 内部成员只能在同一程序集中的文件中访问。

示例: Microsoft内部修饰符