【问题标题】:What does "=>" do in .Net C# when declaring a property? [duplicate]声明属性时,“=>”在 .Net C# 中做了什么? [复制]
【发布时间】:2016-05-30 16:11:24
【问题描述】:

我在 .NET 4.6.1 C# 项目中见过这种属性声明

public object MyObject => new object();

我习惯于像这样声明只读属性:

public object MyObject { get; }

我知道两者之间存在一些差异(第一个创建一个新对象),但我想要更深入的解释以及何时使用它们中的任何一个的一些指示。

【问题讨论】:

  • 已添加到您的问题中。这是否也与 LINQ 中的相同,因为我也很好奇。 Where(t => t.Whatever)
  • @Aizen:不,不一样。

标签: c# .net


【解决方案1】:

每次调用属性 getter 时,C#6 都会计算箭头函数右侧的表达式。

在你的情况下,你每次都实例化一个new object()

在另一种情况下,它将从属性的支持字段中读取。

【讨论】:

    【解决方案2】:

    第一个使用 new-to-C#-6 expression-bodied member 语法。相当于:

    public object MyObject
    {
        get { return new object(); }
    }
    

    第二个也是 C# 6 的新特性 - 一个自动实现的只读属性。相当于:

    private readonly object _myObject; // Except using an unspeakable name
    public object MyObject
    {
        get { return _myObject; }
    }
    

    您只能从声明类的构造函数中分配给MyObject,实际上它只是分配给该字段。

    (这两个“等价物”都使用老式的属性声明,您总是将getset 或两者都作为包含代码的块。)

    【讨论】:

    • 很遗憾,SO 中得分最高的成员没有跳到“它的重复”选项。
    • @MeirionHughes:嗯,在这种情况下,这个问题专门询问自动实现的只读属性和表达式主体成员属性之间的区别。副本没有问这个问题。无论哪种方式我都能看到。
    • 那不应该也重新打开吗?你以单枪匹马而闻名。
    • @MeirionHughes:我可以:但我对任何一种方式都充满了不确定性,以至于我希望单枪匹马做任何事情。如果其他人想把它当作一个骗子来关闭,那对我来说很好。如果其他人想重新打开它,我可以。
    猜你喜欢
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-01
    • 2011-06-05
    • 1970-01-01
    • 2012-03-05
    相关资源
    最近更新 更多