静的コンストラクター、内部コンストラクター、パブリックコンストラクターの違いは何ですか?なぜそれらすべてを一緒に作成する必要があるのですか?
static xyz()
{
}
public xyz()
{
}
internal xyz()
{
}
static
コンストラクターは、その型のオブジェクトが最初にインスタンス化されるとき、または静的メソッドが呼び出されるときに呼び出されます。そして一度だけ実行されます
public
コンストラクターは、他のすべてのタイプからアクセスできます
internal
コンストラクターは、同じアセンブリ内の型にのみアクセスできます
これら3つに加えて、protected
もあります。これは、囲んでいる型から派生した型にのみアクセスできます。
およびprotected internal
これは、同じアセンブリ内の型、またはそれを囲む型から派生した型にのみアクセスできます。
およびprivate
は、型自体およびネストされた型からのみアクセスできます。
public
とinternal
の違いは、internal
コンストラクターは同じアセンブリ内からのみ呼び出すことができるのに対し、public
コンストラクターは他のアセンブリーから呼び出すことができることです。アセンブリも同様です。
static
は、クラスが最初に参照されたときにのみ呼び出されるコンストラクターです。静的メンバーはクラスのインスタンスに属していませんが、「クラス自体」に属しています。 static
の詳細については、 http://msdn.Microsoft.com/en-us/library/79b3xss3(v = vs.80).aspx を参照してください。
new
を使用してクラスのオブジェクトを作成するたびに実行されます内部コードとパブリックコードは同じコンストラクターであり、修飾子が異なるため、コードは実際にはコンパイルされません。これは実行できません。内部またはパブリック(またはプライベート)のいずれかを選択する必要があります。
静的コンストラクターは、typeが最初に使用されるときに呼び出されます。静的コンテキストで、またはインスタンスを作成することによって。
新しいインスタンスが作成されると、他のすべてのコンストラクターが呼び出されます。修飾子は、インスタンスを作成できるコードを決定するだけです。
コンストラクターがプライベートの場合、クラス自体とネストされた型のみがインスタンスを作成できます(おそらく静的ファクトリメソッドで)。これは、メソッドのパブリック/プライベート/内部のように機能します。
すべてのタイプのコンストラクターを作成する必要はありません。アクセス修飾子は、他のアクセス修飾子と同じ機能を果たします-コンストラクターにアクセスする方法を決定します。
internal
の条件を満たすアイテムによってのみ呼び出すことができます。protected
およびprivate
コンストラクターは、期待どおりに動作します。コンストラクターは、アクセス修飾子の条件を満たすアイテムにアクセスできます。