当前位置:  开发笔记 > 编程语言 > 正文

了解自动实现的属性

如何解决《了解自动实现的属性》经验,为你挑选了3个好方法。

我有使用自动实现的属性的简单类:

Public Class foo
{
    public foo() { }  

    public string BarName {get; set;}
}

我显然在我的类中使用变量BarName,现在需要在设置属性值时添加逻辑(它必须全部为大写,如图).这是否意味着我现在需要为BarName创建一个私有变量,例如_BarName,并将我的类中使用的当前BarName变量更改为_BarName?

Public Class foo
{
    public foo() {}  

    private string _BarName = "";
    public string BarName 
    { 
        get {return _BarName;}
        set {_BarName = Value.ToString().ToUpper();}
    }
}

我正在努力确保我理解使用自动实现的属性的含义,以及当我/如果我需要更改某些内容时它会带来什么.我假设重构,如上所示,不是一个突破性的变化,因为该属性基本上保持不变; 它只是在课堂上做了一些工作,以保持这种方式并添加所需的逻辑.

另一个可能更有意义的例子是我需要在使用setter或getter时调用某个方法; 更多然后改变价值.

这似乎是设置属性的代码行和行的公平交易.



1> 小智..:

这是否意味着我现在需要为BarName创建一个私有变量

并更改我班级中使用的当前BarName变量

不要更改类中的其余代码以使用您创建的新私有变量.BarName作为一个属性,旨在隐藏私有变量(以及其他内容),以避免您考虑对代码的其余部分进行全面更改.

我假设重构,如上所示,不是一个突破性的变化,因为该属性基本上保持不变; 只需花一点时间就可以保持这种状态并添加所需的逻辑.

正确.



2> Seth Petry-J..:

你不需要改变任何东西.自动实现的属性只是语法糖.编译器在后台为您生成私有变量和get/set逻辑.如果添加自己的getter/setter逻辑,编译器将使用您的代码而不是其自动生成的代码,但就该属性的用户而言,没有任何改变; 任何引用您的财产的代码都将继续有效.



3> Scott Dorman..:

使用自动属性时,您无法直接访问基础"支持"变量,也无法访问在属性getter和setter中实现的实际逻辑.您只能访问该属性(因此在整个代码中使用BarName).

如果您现在需要在setter中实现特定逻辑,则不能再使用自动属性,而是需要以"老式"方式实现该属性.在这种情况下,您需要实现自己的私有支持变量(首选方法,至少对我而言,是将私有支持变量命名为与属性相同的名称,但使用初始小写(在本例中为支持)变量将命名为barName).然后,您将在getter/setter中实现适当的逻辑.

在您的示例中,您是正确的,它不是一个重大变化.这种类型的重构(从自动属性移动到"普通"属性不应该是一个重大变化,因为您不更改公共接口(公共属性的名称或可访问性).

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有