zoukankan      html  css  js  c++  java
  • 【转】编写高质量代码改善C#程序的157个建议——建议91:可见字段应该重构为属性

    建议91:可见字段应该重构为属性

    字段和属性的本质区别就是属性是方法。

    查看下面这个Person类型:

        class Person
        {
            public string Name { get; set; }
        }

    经过编译器编译后,针对属性Name实际会生成一个private字段和两个public方法:

    [CompilerGenerated]
    private string <Name>k__BackingField;
     
    [CompilerGenerated]
    public void set_Name(string value)
    {
        this.<Name>k__BackingField = value;
    }
    
    [CompilerGenerated]
    public string get_Name()
    {
        return this.<Name>k__BackingField;
    }

    可见,属性实际上是编译器给我们的语法糖。

    属性比字段具有以下的优势:

    1)可以为属性添加代码。正是因为属性是方法,所以可以在方法内对设置或获取属性的过程进行更多精细化控制。如:为属性添加NameChanged事件等。单凭字段是完成不了这样的功能的。

    2)可以让属性支持线程安全。要让属性变成线程安全的可以让类型自身去实现。而要让字段支持线程安全,就只能靠调用者本身来实现了。

    3)属性得到VS编译器的支持,还得到了实现自动属性这种功能。自动属性的特点在LINQ中得到了广泛应用,尤其是在匿名类中,它只能实现只读的自动属性,而不支持字段。

    4)从设计角度,也就是面向对象角度来看,公开的字段也应该使用属性。改变字段的状态,类型不会被通知到;而改变属性的值,类型支持则会被通知。

    综上,如果一个类型存在一个可见字段,那么他应该被重构为属性。当然,如果某个属性仅仅对内部可见,而不涉及以上4点内容,则建议使用字段。

    转自:《编写高质量代码改善C#程序的157个建议》陆敏技

  • 相关阅读:
    解决SpringMVC中jsp页面无法加载js,css,jpg中的信息
    浅谈SpringMVC
    Java垃圾回收与算法
    Linux常见命令
    Warm_up(HCTF_2018)
    house_of_storm 详解
    malloc 函数分析 glibc2.23
    Fastbin attack 总结
    Unlink学习总结
    xman_2019_format(非栈上格式化字符串仅一次利用的爆破)
  • 原文地址:https://www.cnblogs.com/farmer-y/p/7999301.html
Copyright © 2011-2022 走看看