次の方法で共有


構造体 (C# プログラミング ガイド)

構造体は、次のように struct キーワードで定義します。

public struct PostalAddress
{
    // Fields, properties, methods and events go here...
}

構造体は、構文上ではクラスとほとんど変わりませんが、次のようにクラスよりも制限されます。

  • 構造体宣言内では、const または static と宣言されているフィールド以外は初期化できません。

  • 構造体では、既定のコンストラクタ (パラメータなしのコンストラクタ) やデストラクタを宣言できません。

構造体のコピーは、コンパイラによって自動的に作成され、破棄されるので、既定のコンストラクタやデストラクタは不要です。コンパイラは、すべて既定値のフィールドを代入することにより事実上既定のコンストラクタを実装します (「既定値の一覧表 (C# リファレンス)」を参照)。構造体は、クラスや他の構造体を継承できません。

構造体は値型です。オブジェクトを構造体から作成し、変数に代入すると、その変数には、構造体の値全体が含まれます。構造体を含む変数をコピーすると、すべてのデータがコピーされ、新しいコピーを変更しても、以前のコピーのデータは変更されません。構造体は参照を使用しないので、構造体には ID がありません。そのため、同じデータを含む、値型の 2 つのインスタンスは区別できません。C# のすべての値型は本質的に、Object を継承する ValueType から派生します。

値型は、ボックス化と呼ばれる、コンパイラの処理によって参照型に変換できます。詳細については、「ボックス化とボックス化解除」を参照してください。

構造体の概要

構造体には、次の特徴があります。

  • 構造体は値型ですが、クラスは参照型です。

  • クラスとは異なり、構造体は new 演算子を使用せずにインスタンス化できます。

  • 構造体はコンストラクタを宣言できますが、パラメータを受け取る必要があります。

  • 構造体は、他の構造体やクラスから継承できず、基本クラスになれません。すべての構造体が System.ValueType を直接継承し、System.ValueType は System.Object を継承します。

  • 構造体では、インターフェイスを実装できます。

関連項目

詳細情報

参照

関連項目

オブジェクト、クラス、および構造体 (C# プログラミング ガイド)

概念

C# プログラミング ガイド
構造体のデザイン
クラス (C# プログラミング ガイド)