C# - constant属性相当于lambda表达式?

时间:2015-11-20 10:32:40

标签: c# properties lambda

我再次拿起C#,经过长时间的Java工作后回来,正如您所料,我对属性非常感兴趣(哦,Java负担),因此我开始探索它们并想出了这个

private static float Width {
    get { return 0.012f; }
}

经过一些修补,我意识到这也有效(lambda表达式?)。

private static float Width => 0.012f;

现在请帮助这里的Java开发人员了解究竟有什么区别?前者可以做什么,后者不能,反之亦然。

3 个答案:

答案 0 :(得分:9)

  

究竟有什么区别?

两种方式都定义了一个仅限getter的属性。后者只使用C#6的新功能"Expression Bodied Members",特别是“表情身体属性”,它允许您使用胖箭头语法,只是语法糖。

如果您查看compiler generates的内容,您会看到:

private static float Width
{
    get
    {
        return 0.012f;
    }
}

这与您的getter only声明相同。

这些也可以应用于单线方法:

public int Multiply(int x) => x * x;

答案 1 :(得分:2)

平等。

private static float Width => 0.012f;

Width是一个只有getter的属性,就像你的第一个例子一样;
差异仅仅是语法糖。

REF: https://github.com/dotnet/roslyn/wiki/Languages-features-in-C%23-6-and-VB-14

答案 2 :(得分:2)

这是C#6.0下语言的简化,被称为' Expression Bodied Functions / Properties'。

我们的想法是简化语法,并允许您以更短的格式设置函数和属性的值。

Visual Studio杂志上有一篇文章: https://visualstudiomagazine.com/articles/2015/06/03/c-sharp-6-expression-bodied-properties-dictionary-initializer.aspx