用字段还是用属性?

在Effective C#第一条已经讲了属性优于字段。我今天想提出来的是在一个类里面优先使用字段访问数据还是属性。

例子如下:

 1  public   class  A
 2  {
 3       private / protected  String _strField;
 4 
 5       public  String StrProperty { get set ;}
 6 
 7       public   void  Do1()
 8      {
 9            //  Other logic
10          String a  =  _strField;   ||  String a  =  StrProperty;
11            //  Other logic
12      }
13 
14       public   void  Do2()
15      {
16           //  Other logic
17          _strField  =  x;    ||    StrProperty  =  x;
18           //  Other logic
19      }
20  }

在这里例子里面,我想问的是在类A的Do1和Do2方法中,我们该用_strField直接读/写数据,还是使用StrProperty?

这个问题我已经碰到过很多次了,查看微软SDK代码后,发现微软有时候直接使用字段,也有时候直接使用属性,当然大部分是字段。如果使用字段访问数据的话,子类是无法对其进行扩展的,比如在父类中使用_strField = x进行赋值,而子类继承于父类想要在StrProperty的值被更改的时候触发通知,那么子类只能在自己实现的代码触发通知,而子类继承于父类的代码中则不能做这样的检验。如果在父类是使用StrProperty的话,子类可以通过Override这个属性添加出发通知逻辑。但这样又好像破坏了类A的封装性。

目前,我倾向于直接在父类A中使用StrProperty进行数据访问,虽然从一定程度上它破坏父类的封装性。这也是目前的一种折中方案,不知道各位有什么想法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值