【问题标题】:What => means in property declaration (not a lambda expression)? [duplicate]=> 在属性声明中意味着什么(不是 lambda 表达式)? [复制]
【发布时间】:2019-04-21 01:43:16
【问题描述】:
public override double TotalSpecialPower => 1000;

=> 运算符是什么意思?

我知道=>是一个lambda表达式,但我不知道public override double TotalSpecialPower => 1000;中它是什么意思。

还有谁能向我解释getset 以及它们如何在以下代码中工作?

private int _health = 100;
public int Health
{
    get => _health;
    set { _health = value; CaluateHeath(); }
}

【问题讨论】:

  • @RaymondChen QA 指的是 lambda 或匿名方法,而不是 OP 所指的表达式主体成员。
  • @Dai 我打算编辑重复列表,但你的重新打开现在阻止了我。这是stackoverflow.com/questions/54098375/… 的副本
  • 感谢你们两位的回答。

标签: c#


【解决方案1】:

=> 用于您提到的 lambda 函数。它也用于有表情的成员。

有关表达式主体成员的文档可在此处获得:https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/statements-expressions-operators/expression-bodied-members

  • 2015 年的 C# 6.0 增加了对表达式主体方法的支持。
  • 2016 年的 C# 7.0 增加了对表达式主体属性和其他成员的支持。

  • 在方法和属性get块中,它等价于{ return X; }

  • 在属性中:
    • 如果属性只有一个表达式主体,则相当于声明了一个仅限 getter 的 get { return X; } 属性。
    • 如果属性有一个显式的get,那么它相当于``

所以这个:

public int Health
{
    get => _health;
    set {  _health = value; CaluateHeath(); }
}

相当于:

public int Health
{
    get { return _health };
    set {  _health = value; CaluateHeath(); }
}

还有这个:

public override double TotalSpecialPower => 1000;

相当于:

public override double TotalSpecialPower
{
    get { return 1000; }
}

还有这个(注意括号):

public override double TotalSpecialPower() => 1000;

相当于:

public override double TotalSpecialPower()
{
    return 1000;
}

【讨论】:

    【解决方案2】:

    这一切都与表达体有关。属性只是使方法调用看起来像普通字段分配和获取的语法糖。

    一个普通的属性有一个 get 和 set ,后面带有一个卷曲的代码块。对于一个班轮来说,这可能是很多语法。所以我是最新版本的 C# 语言,你可以使用表达式体(粗箭头),就像 lambdas 一样,用于你的 getter 和 setter。

    我希望这会有所帮助。

    https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/statements-expressions-operators/expression-bodied-members

    【讨论】:

      猜你喜欢
      • 2017-12-10
      • 2022-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-04
      相关资源
      最近更新 更多