internal
修飾子とコンストラクターを使用してクラスを宣言する C# コードをいくつか見たことがありますpublic
。
internal class SomeClass
{
public SomeClass()
{
}
}
クラス全体の可視性が内部であり、定義アセンブリ内でのみ表示できる場合、パブリック コンストラクターを持つ意味は何でしょうか?
また、これは意味があるのでしょうか?サムクラスネストされたクラスですか?
ベストアンサー1
スコープはコンストラクター スコープinternal class
をオーバーライドしpublic MyClass()
、コンストラクターを作成しますinternal
。
コンストラクターで を使用すると、後でpublic
クラスを更新しやすくなりますpublic
が、意図が混乱します。私はそうしません。
編集3: 質問の一部を見逃しました。クラスがネストされている場合でも、そのようにすることは問題ありません。ネストは、たとえそれがプライベートクラス、パブリッククラス、または... にネストされていたとしても、何の違いもありません。(C# 言語仕様 - 3.5.2 アクセシビリティ ドメイン)。
編集:また、私の記憶が確かなら、ctor が の場合internal
、 を必要とする制約があるジェネリック型として使用することはできません。where T : new()
これにはコンストラクターが必要になりますpublic
(ref.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>();
}
}