Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ Struct コンストラクタ | Structs & Enumerators
C#オブジェクト指向構造

bookStruct コンストラクタ

メニューを表示するにはスワイプしてください

コンストラクターは、新しいオブジェクトが作成されると自動的に実行されるメソッド。

コンストラクターの構文はメソッドに似ているが、returnType(戻り値の型)は省略される。コンストラクターは値を返さないため。

index.cs

index.cs

copy
1234567891011
struct structureName { // ... fields (optional) public structureName(parameter1, parameter2, ...) { // code } // ... methods (optional) }

コンストラクターの構文に関して重要なポイント:

  1. コンストラクター名構造体名と同じである;
  2. コンストラクターには戻り値がない。

次のプログラムは、オブジェクトが作成されるたびにコンストラクターが呼び出されることを示している。

index.cs

index.cs

copy
12345678910111213141516171819
using 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(); } }
Note
注意

C# 10 より前のバージョンを使用している場合、コンパイル時エラーが発生する可能性があります。C# 10 以降のバージョンを使用することを推奨します。新しいバージョンに切り替えたくない場合、コンストラクターの使用がより制限されることに注意が必要です。例えば、古いバージョンではパラメータなしのコンストラクターを作成できません。

Playerid というフィールドを追加し、そのオブジェクトの一意の識別子とします。各オブジェクトは異なる id 値を持ちます。その値は 0 から始まり、増加します。これを実現するために、グローバル変数 totalPlayers を作成します。

index.cs

index.cs

copy
12345678910111213141516171819202122232425262728
using 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

index.cs

copy
1234567891011121314151617181920212223242526272829
using 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(); } }

コードを段階的に見ていきます。

まず、コンストラクターを作成し、その中で渡された値 xyz をフィールド xyz に代入しています。

index.cs

index.cs

copy
123456
public Coordinate3D(double x, double y, double z) { this.x = x; this.y = y; this.z = z; }

Main メソッド内で、新しい Coordinate3D オブジェクトを作成し、コンストラクターを通じて 357xyz を渡しています。

index.cs

index.cs

copy
1
Coordinate3D coord1 = new Coordinate3D(3, 5, 7);

コンストラクターによってフィールドが正常に初期化されたかどうかを確認するために、displayValueメソッドを使用:

index.cs

index.cs

copy
1
coord1.displayValue();

出力結果から、フィールドが正常に更新されたことが確認できました。

コンストラクターは、オブジェクトを特定のデータで初期化したい場合や、オブジェクト生成時に初期処理を行いたい場合に非常に便利です。

question mark

コンストラクターはいつ呼び出されますか?

正しい答えを選んでください

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 2.  8

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 2.  8
some-alt