2012-02-14 11 views
11

C#のクラスでコンストラクタが定義されていない可能性はありますか? たとえば、私は、このクラスは、あなたが非静的クラスのすべてのコンストラクタを宣言しない場合、コンパイラは、公開を提供コンストラクタを使用しないC#クラス

TextStyle textParameters = new TextStyle(); 

答えて

31

としてクラス

internal class TextStyle 
{ 
    internal string text = ""; 
    internal Font font = new Font("Arial", 8); 
    internal Color color = Color.Black; 
} 

、コードでインスタンス化されています(または抽象クラスで保護されている)パラメータのないコンストラクタです。あなたのクラスには、効果的のコンストラクタを持っています

public TextStyle() 
{ 
} 

これは、C#4仕様のセクション10.11.4で説明されています。クラスは何のインスタンスコンストラクタの宣言が含まれていない場合、デフォルトのインスタンスコンストラクタが自動的に

提供されます。そのデフォルトのコンストラクタは、直接基底クラスのパラメータのないコンストラクタを呼び出すだけです。直接基底クラスにアクセス可能なパラメータなしインスタンスコンストラクタがない場合、コンパイル時エラーが発生します。クラスが抽象クラスの場合、デフォルトコンストラクタの宣言されたアクセシビリティはprotectedです。それ以外の場合は、デフォルトコンストラクタの宣言されたアクセシビリティはpublicです。 任意のインスタンスコンストラクタを持っていないC#で

唯一のクラスは静的クラスであり、それらはコンストラクタを持たないできます。

0

他のコンストラクタを定義していない場合は、暗黙の空のコンストラクタがあります。

+3

-1;これは事実上、Jon Skeetが40秒前に書いたものを繰り返すが、タイプミス、細部の少ない、権威のある参照がない。この回答はページに価値を追加するものではありません。 –

関連する問題