値型 (C# リファレンス)
値型は、次の 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」を参照してください。
数値型の出力書式の詳細については、「数値結果の書式指定の一覧表」を参照してください。