C# 構造体
C# 構造体
このチュートリアルでは、例を使用して C# の構造体について学習します。
構造体 (構造体) は、データを格納するために使用される C# のクラスのようなものです。ただし、クラスとは異なり、構造体は値型です。
人の名前と年齢を保存したいとします。 2 つの変数を作成できます:name そして年齢 価値を保存します。
しかし、複数の人の同じ情報を保存したいとします。
この場合、個人の変数を作成するのは面倒な作業になる可能性があります。これを克服するために、name を格納する構造体を作成できます。 そして年齢 .現在、この構造体はすべての人に使用できます。
C# で構造体を定義する
C# では、struct
を使用します。 構造体を定義するためのキーワード。たとえば、
struct Employee {
public int id;
}
ここでは、id 構造体内のフィールドです。構造体には、メソッド、インデクサーなども含めることができます。
構造体変数を宣言
構造体を使用する前に、まず構造体変数を作成する必要があります。変数とともに構造体名を使用して、構造体変数を宣言します。たとえば、
struct Employee {
public int id;
}
...
// declare emp of struct Employee
Employee emp;
上記の例では、Employee という名前の構造体を作成しました。 .ここで、変数 emp を宣言しました 構造体 Employee の .
C# 構造体にアクセス
.
とともに struct 変数を使用します 構造体のメンバーにアクセスするための演算子。たとえば、
struct Employee {
public int id;
}
...
// declare emp of struct Employee
Employee emp;
// access member of struct
emp.id = 1;
ここでは、変数 emp を使用しました 構造体 Employee の .
で Employee のメンバーにアクセスする演算子 .
emp.id = 1;
これは id にアクセスします 構造体 Employee のフィールド .
注意 :int
のようなプリミティブ データ型 、 bool
、 float
C# で定義済みの構造体です。
例:C# 構造体
using System;
namespace CsharpStruct {
// defining struct
struct Employee {
public int id;
public void getId(int id) {
Console.WriteLine("Employee Id: " + id);
}
}
class Program {
static void Main(string[] args) {
// declare emp of struct Employee
Employee emp;
// accesses and sets struct field
emp.id = 1;
// accesses struct methods
emp.getId(emp.id);
Console.ReadLine();
}
}
}
出力
Employee Id: 1
上記のプログラムでは、Employee という名前の構造体を作成しました。 .フィールド id が含まれています およびメソッド getId() .
プログラムの内部 クラスで、変数 emp を宣言しました 構造体 Employee の .次に、emp を使用しました クラスのフィールドとメソッドにアクセスするための変数。
注意 :new
を使用して構造体をインスタンス化することもできます キーワード。たとえば、
Employee emp = new Employee();
ここで、この行は構造体のパラメーターなしのコンストラクターを呼び出し、すべてのメンバーを既定値で初期化します。
C# 構造体のコンストラクタ
C# では、構造体にコンストラクターを含めることもできます。たとえば、
struct Employee {
public int id;
// constructor
public Employee(int employeeId) {
id = employeeId
}
}
ここでは、パラメーター化されたコンストラクター Employee()
を作成しました。 パラメータ employeeId を使用 .
注意 :C# バージョン 9.0 以下では、パラメーターなしのコンストラクターを作成できません。
例:C# 構造体のコンストラクター
using System;
namespace CsharpStruct {
// defining struct
struct Employee {
public int id;
public string name;
// parameterized constructor
public Employee(int employeeId, string employeeName) {
id = employeeId;
name = employeeName;
}
}
class Program {
static void Main(string[] args) {
// calls constructor of struct
Employee emp = new Employee(1, "Brian");
Console.WriteLine("Employee Name: " + emp.name);
Console.WriteLine("Employee Id: " + emp.id);
Console.ReadLine();
}
}
}
出力
Employee Name: Brian Employee Id: 1
上記の例では、Employee 内にパラメーター化されたコンストラクターを作成しました。 構造体。コンストラクター内で、フィールドの値を割り当てました:id そして名前 .
行に注意してください、
Employee emp = new Employee(1, "Brian");
C# クラスと同様に、new
を使用しています。 コンストラクタを呼び出すキーワード。こちら、1 と「ブライアン」 コンストラクターに渡される引数で、パラメーター employeeID に割り当てられます と employeeName それぞれ」
注意 :パラメーター化されたコンストラクター内の構造体のすべてのフィールドに値を割り当てる必要があります。たとえば、
// error code
public Employee(int employeeID, employeeName) {
id = employeeID;
}
ここでは、name の値を割り当てていません。 分野。そのため、コードはエラーを生成します。
C# 構造体のプロパティ
C# 構造体内でプロパティを使用することもできます。たとえば、
using System;
namespace CsharpStruct {
// defining struct
struct Employee {
public int id;
// creates property
public int Id {
// returns id field
get {
return id;
}
// sets id field
set {
id = value;
}
}
}
class Program {
static void Main(string[] args) {
// calls the constructor of struct
Employee emp = new Employee();
emp.Id = 1;
Console.WriteLine("Employee Id: " + emp.Id);
Console.ReadLine();
}
}
}
出力
Employee Id: 1
上記の例では、Id があります。 Employee 内のプロパティ 構造体。
取得 メソッドは id を返します フィールドとセット メソッドは値を id に割り当てます フィールド。
C# のクラスと構造体の違い
C# では、クラスと構造体は似ています。ただし、両者にはいくつかの違いがあります。
クラスは参照型ですが、構造体は値型です。たとえば、
using System;
namespace CsharpStruct {
// defining class
class Employee {
public string name;
}
class Program {
static void Main(string[] args) {
Employee emp1 = new Employee();
emp1.name = "John";
// assign emp1 to emp2
Employee emp2 = emp1;
emp2.name = "Ed";
Console.WriteLine("Employee1 name: " + emp1.name);
Console.ReadLine();
}
}
}
出力
Employee1 name: Ed
上記の例では、emp1 の値を割り当てています。 emp2 へ . emp2 object は emp1 と同じオブジェクトを参照しています . emp2 の更新 emp1 の値を更新します
これが、クラスが参照型である理由です。 .
クラスとは対照的に、ある構造体変数を別の構造体変数に割り当てると、構造体の値が割り当てられた変数にコピーされます。したがって、1 つの構造体変数を更新しても、他の変数には影響しません。たとえば、
using System;
namespace CsharpStruct {
// defining struct
struct Employee {
public string name;
}
class Program {
static void Main(string[] args) {
Employee emp1 = new Employee();
emp1.name = "John";
// assign emp1 to emp2
Employee emp2 = emp1;
emp2.name = "Ed";
Console.WriteLine("Employee1 name: " + emp1.name);
Console.ReadLine();
}
}
}
出力
Employee1 name: John
emp1 の値を代入すると emp2 へ 、新しい値 emp2 創造された。ここで、emp1 の値 emp2 にコピーされます . emp2 を変更します。 emp1 には影響しません .
これが構造体が値型である理由です .
さらに、C# クラスの重要な機能である継承は構造体では不可能です。
C言語