web-dev-qa-db-ja.com

静的コンストラクター、内部コンストラクター、パブリックコンストラクターの違いは何ですか?

静的コンストラクター、内部コンストラクター、パブリックコンストラクターの違いは何ですか?なぜそれらすべてを一緒に作成する必要があるのですか?

 static xyz()
 {
 }

 public xyz()
 {
 }

 internal xyz()
 {
 }
22

staticコンストラクターは、その型のオブジェクトが最初にインスタンス化されるとき、または静的メソッドが呼び出されるときに呼び出されます。そして一度だけ実行されます

publicコンストラクターは、他のすべてのタイプからアクセスできます

internalコンストラクターは、同じアセンブリ内の型にのみアクセスできます

これら3つに加えて、protectedもあります。これは、囲んでいる型から派生した型にのみアクセスできます。

およびprotected internalこれは、同じアセンブリ内の型、またはそれを囲む型から派生した型にのみアクセスできます。

およびprivateは、型自体およびネストされた型からのみアクセスできます。

15
Rune FS

publicinternalの違いは、internalコンストラクターは同じアセンブリ内からのみ呼び出すことができるのに対し、publicコンストラクターは他のアセンブリーから呼び出すことができることです。アセンブリも同様です。

staticは、クラスが最初に参照されたときにのみ呼び出されるコンストラクターです。静的メンバーはクラスのインスタンスに属していませんが、「クラス自体」に属しています。 staticの詳細については、 http://msdn.Microsoft.com/en-us/library/79b3xss3(v = vs.80).aspx を参照してください。

8
C.Evenhuis
  • 静的コンストラクターは、クラスを最初に使用する前に1つだけ実行し、クラスの静的メンバーにのみアクセスできます。
  • パブリックコンストラクタは、newを使用してクラスのオブジェクトを作成するたびに実行されます
  • Internalは、上記のコンストラクターのもう1つのアクセス修飾子です。プライベートにすることもできます。これは、他の関数のアクセス修飾子とまったく同じです。

内部コードとパブリックコードは同じコンストラクターであり、修飾子が異なるため、コードは実際にはコンパイルされません。これは実行できません。内部またはパブリック(またはプライベート)のいずれかを選択する必要があります。

4
Petar Ivanov

静的コンストラクターは、typeが最初に使用されるときに呼び出されます。静的コンテキストで、またはインスタンスを作成することによって。

新しいインスタンスが作成されると、他のすべてのコンストラクターが呼び出されます。修飾子は、インスタンスを作成できるコードを決定するだけです。

コンストラクターがプライベートの場合、クラス自体とネストされた型のみがインスタンスを作成できます(おそらく静的ファクトリメソッドで)。これは、メソッドのパブリック/プライベート/内部のように機能します。

4
Zebi

すべてのタイプのコンストラクターを作成する必要はありません。アクセス修飾子は、他のアクセス修飾子と同じ機能を果たします-コンストラクターにアクセスする方法を決定します。

  • 静的コンストラクターは、クラスが静的に最初にアクセスされたときに呼び出されます。
  • internalアクセス修飾子を持つコンストラクターは、「同じアセンブリ内のファイル内でのみアクセス可能」であるinternalの条件を満たすアイテムによってのみ呼び出すことができます。
  • publicアクセス修飾子を持つコンストラクターは何でもアクセスできます
  • 等々。 protectedおよびprivateコンストラクターは、期待どおりに動作します。コンストラクターは、アクセス修飾子の条件を満たすアイテムにアクセスできます。
0
foxy