• Effective C# 学习笔记(原则一:始终能的使用属性(property),而不是可直接访问的Data Member)


    原则一:始终能的使用属性(property),而不是可直接访问的Data Member
        Always use properties instead of accessible data members.

    为什么要使用属性:

        1.Net的data binding只支持Property,而不支持public data member的访问

               Data binding的目的就是把一个object的Property绑定到一个用户界面的control上,web control或者windows form control. Data binding是通过reflection来实现的,

                如下例: textBoxCity.DataBindings.Add("Text", address, "City");

                   这段code就是把textBoxCity的Text Property绑定到address这个object的City Property上。

                   如果你把address的City Property改成public data member,这段code是不会运行的。

       2.当有新的需求时,通过修改Property的实现方法来适应这个新的需求,要比在你的程序里修改所有的public data member去适应这个需求容易太多了。 

              比如说你以前定义了一个类customer,现在你发现由于当初的粗心没有强制customer姓名不能为空,如果你使用了Property,你可以非常轻松的添加一个检查机制,

             如下面这段code:   

          

     1 public class Customer
     2     {
     3         private string name;
     4         public string Name
     5         {
     6             get
     7             {
     8                 return name;
     9             }
    10             set
    11             {
    12                 if ((value == null) || (value.Length == 0)) {
    13                     throw new ArgumentException("Name can not be blank", "Name");
    14                 }
    15                 name = value;
    16             }
    17         }
    18         //...
    19     }
    View Code

           如果你使用了public data member,你就要找遍你的程序,在每个地方都修改

       3.Property是用methods实现的,所以添加multi-threaded的支持是非常方便的。

           比如想要添加同步访问的支持:

     1 public class Customer
     2     {
     3         private string name;
     4         public string Name 
     5         { 
     6             get 
     7             { 
     8                 lock (this) 
     9                 { 
    10                     return name; 
    11                 } 
    12             } 
    13             set 
    14             { 
    15                 lock (this) 
    16                 {
    17                     name = value; 
    18                 }
    19             } 
    20         }
    21     }
    View Code

       4..Property是用methods实现的,所以它拥有methods所拥有的一切。Property可以被定义为virtual:

           你也可以把Property扩展为abstract,甚至成为interface的一部分。

      总结:

          总而言之,当你想让你类内部的数据被外界访问到时(不管是public还是protected),一定要用Property。

          对于序列和字典,使用indexer。你类的data member永远应该是private,绝无例外。

          使用Property,你可以得到如下好处:

          1.Data binding支持

          2.对于需求变化有更强的适应性,更方便的修改实现方法

    记住,现在多花1分钟使用Property,会在你修改程序以适应设计变化时,为你节约n小时。

  • 相关阅读:
    Spring 注解@Transactional
    数据库中为什么要建立视图,它有什么好处?
    类、抽象类与接口的区别
    Comparable和Comparator的区别?
    jetty安装
    python 命令行参数sys.argv
    python--用户认证登录实现
    python--查询员工信息
    python基础
    python学习之路---编程风格规范
  • 原文地址:https://www.cnblogs.com/kest/p/4381215.html
Copyright © 2020-2023  润新知