C#のメソッドで()を省略して{}も省略すると読み取り専用のプロパティに見える

C# コンピュータ
C#

ネットでとあるC#ソースコードを見ていたらクラスのメンバーにプロパティなのかメソッドなのか、ぱっと見て認識できないコードに遭遇しました。

using System;

class Sample1
{
    public int[] IntArray = new int[] {0, 1, 2};
    public int SecondItem => IntArray[1];
}

class Program1
{
    static void Main()
    {
        var obj = new Sample1();

        Console.WriteLine("{0}", obj.SecondItem);
    }
}

サンプルコードを作って試した所メソッドであることが判明しました。
public int SecondItem()が無いのでプロパティに見えますが、=>があるので{}を省略した1行メソッドにも見えます。
呼び出し側の()も省略したところプロパティにアクセスしているように見えます。紛らわしいと一瞬思いましたが、引数の無い1行メソッドは読み取り専用のプロパティと同じような使われ方をしますので、これはこれで便利な省略系として覚えておきたいと思います。

コメント