値型 (C# リファレンス)
更新 : 2007 年 11 月
値型は、次の 2 つの主要カテゴリで構成されます。
構造体は、次のカテゴリに分類されます。
値型の主な機能
値型に基づく変数は、値を直接含みます。ある値型の変数を別の変数に代入すると、含まれている値がコピーされます。これは参照型の変数の代入とは異なります。参照型の変数の代入では、オブジェクト自体ではなく、オブジェクトへの参照がコピーされます。
すべての値型は、System.ValueType から暗黙的に派生します。
参照型とは異なり、値型から新しい型を派生させることができます。ただし、参照型と同様に、struct 型はインターフェイスを実装できます。
参照型とは異なり、値型には null 値を含めることはできません。ただし、Null 許容型の機能では、値型を null に代入できます。
それぞれの値型には、その型の既定値を初期化する既定のコンストラクタが暗黙的に存在します。値型の既定値の詳細については、「既定値の一覧表」を参照してください。
単純型の主な機能
C# 言語に不可欠なすべての単純型は、.NET Framework System 型のエイリアスです。たとえば、int は System.Int32 のエイリアスです。すべてのエイリアスの一覧については、「組み込み型の一覧表 (C# リファレンス)」を参照してください。
定数式のオペランドがすべて単純型の定数である場合、定数式はコンパイル時に評価されます。
単純型は、リテラルを使用して初期化できます。たとえば、'A' は char 型のリテラルであり、2001 は int 型のリテラルです。
値型の初期化
C# のローカル変数は、使用する前に初期化する必要があります。たとえば、次の例のように、初期化せずにローカル変数を宣言するとします。
int myInt;
この変数は、初期化した後でないと使用できません。初期化するには、次のステートメントを使用します。
myInt = new int(); // Invoke default constructor for int type.
このステートメントは、次のステートメントと同等です。
myInt = 0; // Assign an initial value, 0 in this example.
次の例のように、宣言と初期化を 1 つのステートメントで行うことができます。
int myInt = new int();
または
int myInt = 0;
new 演算子を使用すると、それぞれの型の既定のコンストラクタが呼び出され、既定値が変数に代入されます。前の例では、既定のコンストラクタが myInt に値 0 を代入します。既定のコンストラクタによる値の代入の詳細については、「既定値の一覧表」を参照してください。
ユーザー定義型の場合は、new を使用して既定のコンストラクタを呼び出します。たとえば、Point struct の既定のコンストラクタを呼び出すステートメントは、次のとおりです。
Point p = new Point(); // Invoke default constructor for the struct.
既定のコンストラクタが呼び出されると、struct は明示的に代入するものと見なされ、すべてのメンバがそれぞれの既定値に初期化されます。
new 演算子の詳細については、「new」を参照してください。
数値型の出力書式の詳細については、「数値結果の書式指定の一覧表」を参照してください。