zoukankan      html  css  js  c++  java
  • 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小时。

  • 相关阅读:
    对我影响最大的老师
    秋季学习总结
    介绍自己
    搭建新环境的准备工作
    我的技术博客开通啦!!
    java数组及数组的插入,删除,冒泡算法
    包(package)以及面向对象三个基本特征(继承)的介绍
    常用的Arrays类和二维数组以及二分法的介绍
    构造方法、封装、关键字(this、static)和代码块的介绍
    类和对象的介绍
  • 原文地址:https://www.cnblogs.com/kest/p/4381215.html
Copyright © 2011-2022 走看看