C#プロパティ完全ガイド:アクセサーでプライベートフィールドを制御
プロパティは、クラス、構造体、インターフェースの名前付きメンバーです。クラスや構造体のメンバー変数やメソッドはフィールドと呼ばれます。プロパティはフィールドの拡張であり、同じ構文でアクセスされます。アクセサーを通じて、プライベートフィールドの値を読み取り、書き込み、操作します。
プロパティはストレージの場所を命名しません。代わりに、値を読み取り、書き込み、計算するアクセサーを持ちます。
例えば、年齢、名前、コードのプライベートフィールドを持つStudentクラスを考えます。これらのフィールドをクラスの外部スコープから直接アクセスすることはできませんが、これらのプライベートフィールドにアクセスするためのプロパティを持つことができます。
アクセサー
プロパティのアクセサーには、プロパティの取得(読み取りまたは計算)または設定(書き込み)を助ける実行可能ステートメントが含まれます。アクセサー宣言には、getアクセサー、setアクセサー、または両方を含められます。例:
// string型のCodeプロパティを宣言: public string Code { get { return code; } set { code = value; } } // string型のNameプロパティを宣言: public string Name { get { return name; } set { name = value; } } // int型のAgeプロパティを宣言: public int Age { get { return age; } set { age = value; } }
例
次の例はプロパティの使用を示します。
Live Demo using System; namespace tutorialspoint { class Student { private string code = "N.A"; private string name = "not known"; private int age = 0; // string型のCodeプロパティを宣言: public string Code { get { return code; } set { code = value; } } // string型のNameプロパティを宣言: public string Name { get { return name; } set { name = value; } } // int型のAgeプロパティを宣言: public int Age { get { return age; } set { age = value; } } public override string ToString() { return "Code = " + Code +", Name = " + Name + ", Age = " + Age; } } class ExampleDemo { public static void Main() { // 新しいStudentオブジェクトを作成: Student s = new Student(); // 学生のコード、名前、年齢を設定 s.Code = "001"; s.Name = "Zara"; s.Age = 9; Console.WriteLine("Student Info: {0}", s); // 年齢を増やす s.Age += 1; Console.WriteLine("Student Info: {0}", s); Console.ReadKey(); } } }
上記コードをコンパイル・実行すると、以下の結果が得られます。
Student Info: Code = 001, Name = Zara, Age = 9 Student Info: Code = 001, Name = Zara, Age = 10
抽象プロパティ
抽象クラスは抽象プロパティを持つことができ、これは派生クラスで実装される必要があります。次のプログラムでこれを説明します。
Live Demo using System; namespace tutorialspoint { public abstract class Person { public abstract string Name { get; set; } public abstract int Age { get; set; } } class Student : Person { private string code = "N.A"; private string name = "N.A"; private int age = 0; // string型のCodeプロパティを宣言: public string Code { get { return code; } set { code = value; } } // string型のNameプロパティを宣言: public override string Name { get { return name; } set { name = value; } } // int型のAgeプロパティを宣言: public override int Age { get { return age; } set { age = value; } } public override string ToString() { return "Code = " + Code +", Name = " + Name + ", Age = " + Age; } } class ExampleDemo { public static void Main() { // 新しいStudentオブジェクトを作成: Student s = new Student(); // 学生のコード、名前、年齢を設定 s.Code = "001"; s.Name = "Zara"; s.Age = 9; Console.WriteLine("Student Info:- {0}", s); // 年齢を増やす s.Age += 1; Console.WriteLine("Student Info:- {0}", s); Console.ReadKey(); } } }
上記コードをコンパイル・実行すると、以下の結果が得られます。
Student Info: Code = 001, Name = Zara, Age = 9 Student Info: Code = 001, Name = Zara, Age = 10
C言語
- 算術の性質:結合法則、交換法則、分配法則の解説
- 指数法則:代数的操作のための主要プロパティ
- 銀の抗菌力:金属が細菌、真菌、ウイルスと戦う仕組み
- AMPCO® 25 鍛造品:優れた金型材料向け高性能合金
- UGICHROM® 4462 ─ 油圧・空圧システム向け高性能マイクロフィッシャー・クロムメッキ
- UGICHROM® 4362 ─ 油圧・空圧用プレミアム マイクロフィッシャー・クロムメッキ ステンレス鋼
- Bainidur® 1300 – 低割れリスク、高強度の鍛造用合金
- Bainidur® 7980 CN:浸炭・窒化浸炭に優れたプレミアム低合金鋼
- UGICHROM® 4460: 油圧・空圧用途向け超耐久クロムめっきステンレス鋼
- Printdur® 4404:積層造形用316Lステンレス鋼
- モリブデン・ハフニウム・カーボン合金(MHC) – 高温粒子強化合金