为了账号安全,请及时绑定邮箱和手机立即绑定

声明C#属性

声明C#属性

C#
慕尼黑5688855 2021-04-06 13:14:44
我曾经按如下方式设置C#类成员:public class MyClass{    private string member1;    public string Member1{ get; set; }}使用Visual Studio 2017和.NET Framework 4.6.1,当我按照VS2017的建议重构代码时,相同的代码可以很好地工作,但是看起来像这样:public class MyClass{   private string member1;   public string Member1 { get => member1; set => member1 = value; }}我想知道更多的东西的更改get和set性能的意思。
查看完整描述

3 回答

?
四季花海

TA贡献1811条经验 获得超5个赞

属性初始化语法是C#语言的一部分,因此不依赖于.NET Framework版本。您正在使用的Visual Studio版本确实会影响可用的C#版本,但是请注意,例如,可以使用编写最新的C#版本7.x时使用的版本,而不必-当前的Visual Studio 2015。


顺便说一句,让我们看一些属性声明。


传统的,沼泽标准的字段支持的C#属性声明看起来像这样,尽管理想情况下使用更具描述性的命名:


public class MyClass

{

    private string member1;


    public string Member1

    {

        get { return member1; }

        set { member1 = value; }

    }

}

我们有一个公共获取者,它返回了我们的私人支持领域member1;和一个公共设置者来设置我们的私人支持领域。


上面的代码很可能是您以前认为使用的代码。这是您提供的代码:


public class MyClass

{

    private string member1;


    public string Member1 { get; set; }

}

...但不是。private string member1;该Member1属性未引用。实际上,在此示例中,member1根本没有引用它,编译器可能会对其进行优化!您真正写的是:


public class MyClass

{

    public string Member1 { get; set; }

}

上面是C#3.0中引入的自动实现的属性。请注意,get和set关键字后面没有正文。


在C#3.0和更高版本中,当属性访问器中不需要其他逻辑时,自动实现的属性可使属性声明更加简洁...当您以这种方式声明属性时,编译器将创建一个私有的匿名后备字段,该字段可以仅可通过属性的get和set访问器进行访问。


因此,就像在“传统的沼泽标准字段支持的属性”示例中一样,我们获得了字段支持的属性,只是这次我们不在代码中定义字段,并且该字段对我们来说是匿名的。在编译器中,我们值得信赖!


我们快完成了。让我们看看您的新代码:


public class MyClass

{

    private string member1;

    public string Member1 { get => member1; set => member1 = value; }

}

get => member1-这是C#6中引入的具有表达式主体定义的属性get访问器。它只是等价于的语法糖get { return member1; }。


set => member1 = value;是具有表达式主体定义的属性集访问器。此语法是在C#7中为设置器引入的。它是的语法糖set { member1 = value; }。


为了结束本总结,C#6还引入了用于auto-properties的初始化程序。初始化程序直接初始化后备字段。考虑以下优雅的轻量级代码,以声明和初始化一个简单的(隐藏的,匿名的)字段支持的可读和可写属性:


public string Member1 { get; set; } = "I am Member 1!"


查看完整回答
反对 回复 2021-04-24
?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

您提供的代码示例的主要区别在于member1,该较早示例中的字段实际上未由该Member1属性修改。

否则,新语法只是getter和setter的内联实现的另一种选择。


查看完整回答
反对 回复 2021-04-24
  • 3 回答
  • 0 关注
  • 191 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信