set {accessor-body} get {accessor-body}
C# 7.0以降ならば、アクセサをラムダ式で記述できます。構文:メソッドやプロパティをラムダ式で簡潔に実装するには?[C# 6.0/7.0]:.NET TIPS - @IT山本康彦 (2017/07/05)
private int a; public int A { get => a; set => a = value; }
プロパティの宣言を簡略化できます。
※自動実装プロパティがサポートされるのは、C# 3.0 (Visual Studio 2008) 以降です。アクセサの実装コードをセミコロン (;) に置き換えることで、自動実装プロパティとなります。なお自動実装プロパティには、getとsetの両方のアクセサが必須です。
通常のプロパティ | 自動実装プロパティ |
---|---|
class MyClass { private int a; public int A { get { return a; } set { a = value; } } } |
class MyClass { public int A { get; set; } }※プロパティのフィールド (バッキング フィールド) は、コンパイラによって自動的に作成されます。 |
アクセサはgetとsetの両方が必須となるため、それを削除することはできず、アクセス修飾子を付加することでアクセス制限を実現します。
通常のプロパティ | 自動実装プロパティ |
---|---|
class MyClass { private int a; public int A { get { return a; } } } |
class MyClass { public int A { get; private set; } } |
C# 6.0以降ならばラムダ式を用いて次のように記述することで、読み取り専用とできます。
private int a; public int A => a;
インデクサとは、クラスのインスタンスに対して、配列の要素のようにインデックスを付けてアクセスできるようにする機能です。
public class MyClass { double[] x = new double[10]; public double this[int index] // プロパティの名前をthisとする { get { return x[index]; } set { x[index] = value; } } } static void Main(string[] args) { MyClass myClass = new MyClass(); myClass[5] = 100; // インデックスを付けてアクセスできる double b = myClass[5]; }