什么是对一个内部类的公共构造的意思[复制](What does a public construct

2019-09-02 15:41发布

这个问题已经在这里有一个答案:

  • 什么是在一个内部类的公共构造和内部构造的区别? 5个回答

我见过的声明与类一些C#代码internal修饰,具有public构造函数:

internal class SomeClass
{
    public SomeClass()
    {
    }
}

什么是具有公共构造的角度来看,如果整个班的知名度是内部的,因此可以看到的只是定义装配里面?

此外,这是否任何意义的情况下,是SomeClass的嵌套类?

Answer 1:

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

使用public的构造使得它更容易类更新到public以后,但混淆意图。 我不这样做。

编辑3:我错过了你的问题的一部分。 它仍然是细做,如果你的类嵌套。 嵌套不能作出任何区别,即使是嵌套在一个私有的类中的一个公共类...(见C#语言规范- 3.5.2可访问域 )。

编辑:而且,如果我还记得,如果构造函数是internal ,它不能作为一种通用型那里是需要约束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<T>
        where T : new() {}

    static void Main(string[] args) {
        GenericClass<InternalClass> doesNotCompile = new GenericClass<InternalClass>();
        GenericClass<InternalClassPublicCtor> doesCompile = new GenericClass<InternalClassPublicCtor>();
    }
}


Answer 2:

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

通常情况下,一个成员的可访问性并不比包含它的类型的可访问更大。 然而,一个内部类的公共成员可能与如果构件实现接口方法或覆盖在一公共基类中定义的虚拟方法的组件的外部进行访问。

所以,如果,例如,你有一个内部实现一个公共接口,你仍然可以暴露某些成员公开。

此外,假设你突然想你的内部类是公共的。 这是一个更容易简单地改变对类比所有成员的访问修饰符。



文章来源: What does a public constructor on an internal class mean [duplicate]