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

構造体は struct キーワードを使って定義します。次はその例です。Structs are defined by using the struct keyword, for example:

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

構造体の構文はクラスとほとんど同じです。Structs share most of the same syntax as classes. 構造体の名前を、有効な C# の識別子名にする必要があります。The name of the struct must be a valid C# identifier name. 構造体は次の点でクラスよりも制限されています。Structs are more limited than classes in the following ways:

  • 構造体宣言内では、const または static と宣言されているフィールド以外は初期化できません。Within a struct declaration, fields cannot be initialized unless they are declared as const or static.
  • 構造体では、既定のコンストラクター (パラメーターなしのコンストラクター) やファイナライザーを宣言できません。A struct cannot declare a default constructor (a constructor without parameters) or a finalizer.
  • 構造体は、割り当て時にコピーされます。Structs are copied on assignment. 構造体を新しい変数に割り当てると、すべてのデータがコピーされ、新しいコピーを変更しても、元のコピーのデータは変更されません。When a struct is assigned to a new variable, all the data is copied, and any modification to the new copy does not change the data for the original copy. これは、Dictionary<string, myStruct> などの値の型のコレクションを使用する際に重要です。This is important to remember when working with collections of value types such as Dictionary<string, myStruct>.
  • 参照型であるクラスとは異なり、構造体は値型です。Structs are value types, unlike classes, which are reference types.
  • クラスとは異なり、構造体は new 演算子を使用せずにインスタンス化できます。Unlike classes, structs can be instantiated without using a new operator.
  • 構造体は、パラメーターのあるコンストラクターを宣言できます。Structs can declare constructors that have parameters.
  • 構造体は、他の構造体やクラスから継承できず、基本クラスになることはできません。A struct cannot inherit from another struct or class, and it cannot be the base of a class. すべての構造体が ValueType を直接継承し、System.ValueType は Object を継承します。All structs inherit directly from ValueType, which inherits from Object.
  • 構造体は、インターフェイスを実装できます。A struct can implement interfaces.
  • 構造体は null にすることができません。変数が null 許容型として宣言されない限り、構造体変数に null を割り当てることはできません。A struct cannot be null, and a struct variable cannot be assigned null unless the variable is declared as a nullable type.

詳細情報For more information:

関連項目See also