18

internal修飾子とpublicコンストラクターを使用してクラスを宣言する C# コードを見てきました。

internal class SomeClass
{
    public SomeClass()
    {
    }
}

クラス全体の可視性が内部である場合、パブリック コンストラクターを使用するポイントは何ですか。したがって、定義アセンブリ内でのみ表示されます。

また、 SomeClassがネストされたクラスの場合、これは意味がありますか?

4

2 に答える 2

21

スコープはコンストラクターのスコープをinternal classオーバーライドし、public MyClass()コンストラクターを作成しinternalます。

コンストラクターで使用publicすると、後でクラスを簡単に更新できますが、public意図が混乱します。私はしません。

編集 3: 質問の一部を見逃しました。クラスがネストされている場合は、それでも問題ありません。入れ子は、パブリック クラス内のプライベート クラスに入れ子になっている場合でも、違いはありません。

EDIT:そして、私が思い出す、ctorinternalおよびバインドされていない型)。where T : new()public

編集 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>();
    }
}
于 2013-05-11T18:53:46.137 に答える
10

MSDNから- アクセス修飾子 (C# プログラミング ガイド) :

通常、メンバーのアクセシビリティは、それを含む型のアクセシビリティよりも高くありません。ただし、メンバーがインターフェイス メソッドを実装するか、パブリック基本クラスで定義されている仮想メソッドをオーバーライドする場合、内部クラスのパブリック メンバーは、アセンブリの外部からアクセスできる可能性があります。

したがって、たとえば、パブリック インターフェイスの内部実装がある場合でも、特定のメンバーをパブリックとして公開できます。

さらに、突然内部クラスを public にしたいとします。すべてのメンバーよりも、クラスのアクセス修飾子を変更する方がはるかに簡単です。

于 2013-05-11T18:58:25.737 に答える