Struct コンストラクタ
メニューを表示するにはスワイプしてください
コンストラクターは、新しいオブジェクトが作成されると自動的に実行されるメソッド。
コンストラクターの構文はメソッドに似ているが、returnType(戻り値の型)は省略される。コンストラクターは値を返さないため。
index.cs
1234567891011struct structureName { // ... fields (optional) public structureName(parameter1, parameter2, ...) { // code } // ... methods (optional) }
コンストラクターの構文に関して重要なポイント:
- コンストラクター名は構造体名と同じである;
- コンストラクターには戻り値がない。
次のプログラムは、オブジェクトが作成されるたびにコンストラクターが呼び出されることを示している。
index.cs
12345678910111213141516171819using System; struct Player { public Player() { Console.WriteLine($"New Player Object Created"); } } class Program { static void Main(string[] args) { Player player1 = new Player(); Player player2 = new Player(); Player player3 = new Player(); } }
C# 10 より前のバージョンを使用している場合、コンパイル時エラーが発生する可能性があります。C# 10 以降のバージョンを使用することを推奨します。新しいバージョンに切り替えたくない場合、コンストラクターの使用がより制限されることに注意が必要です。例えば、古いバージョンではパラメータなしのコンストラクターを作成できません。
Player に id というフィールドを追加し、そのオブジェクトの一意の識別子とします。各オブジェクトは異なる id 値を持ちます。その値は 0 から始まり、増加します。これを実現するために、グローバル変数 totalPlayers を作成します。
index.cs
12345678910111213141516171819202122232425262728using System; class ConsoleApp { // We use the term 'static' when declaring variables directly under class // This will be explained in much more detail in later sections. public static int totalPlayers = 0; // This time we create put the struct inside the `ConsoleApp` class // This is to be able to use the `totalPlayers` variable easily. struct Player { public int id; public Player() { id = totalPlayers++; Console.WriteLine($"New Player Object Created With ID {id}"); } } static void Main(string[] args) { Player player1 = new Player(); Player player2 = new Player(); Player player3 = new Player(); } }
上記のコードでは、構造体を Program クラス内に配置することで、コンストラクター内から 'totalPlayers' 変数にアクセスできるようにしています。
新しいオブジェクトを作成する際、次の構文を使用してコンストラクターにデータを渡すことができます:
structureName variableName = new structureName(argument1, argument2, …);
以下は、その使用例です:
index.cs
1234567891011121314151617181920212223242526272829using System; struct Coordinate3D { public double x; public double y; public double z; public Coordinate3D(double x, double y, double z) { this.x = x; this.y = y; this.z = z; } public void displayValue() { Console.WriteLine($"{this.x}, {this.y}, {this.z}"); } } class ConsoleApp { static void Main(string[] args) { Coordinate3D coord1 = new Coordinate3D(3, 5, 7); coord1.displayValue(); } }
コードを段階的に見ていきます。
まず、コンストラクターを作成し、その中で渡された値 x、y、z をフィールド x、y、z に代入しています。
index.cs
123456public Coordinate3D(double x, double y, double z) { this.x = x; this.y = y; this.z = z; }
Main メソッド内で、新しい Coordinate3D オブジェクトを作成し、コンストラクターを通じて 3、5、7 に x、y、z を渡しています。
index.cs
1Coordinate3D coord1 = new Coordinate3D(3, 5, 7);
コンストラクターによってフィールドが正常に初期化されたかどうかを確認するために、displayValueメソッドを使用:
index.cs
1coord1.displayValue();
出力結果から、フィールドが正常に更新されたことが確認できました。
コンストラクターは、オブジェクトを特定のデータで初期化したい場合や、オブジェクト生成時に初期処理を行いたい場合に非常に便利です。
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください