日期:2014-05-18  浏览次数:21227 次

又发现一处C#入门经典bug,也是关于属性的访问器的,汗,get set哪那么多问题啊
书上原话:
如果在定义属性的接口中只包含set块,就可以给实现该接口的类中的属性添加get块,反之亦然,但是,只有所添加的访问器的可访问修饰符比接口中定义的访问器的可访问修饰符更严格时,才能这么做,按照定义,接口定义的访问器是公共的,也就是说,只能添加非公共的访问器。

这句话有问题,我写了如下代码
  public interface Face
  {
  int Age
  {
  get;
  }
  }

  public class ClassOne : Face
  {
  int age;
  public int Age
  {
  get
  {
  return age;
  }
  set
  {
  age = value;
  }
  }
  }
一点问题都没有,按照书上的说法,只能添加非公共的访问器,这里我已经违背了该原则,但是照样成功了

------解决方案--------------------
这是隐式实现,可以这样写.显式实现是不行的
------解决方案--------------------
* 在派生类中使用修饰符的属性,表示对基类中的同名属性进行重载。
* 在重载的声明中,属性的名称、类型、访问修饰适用地区都应该与基类中被继承的属性一致。
* 如果基类的属性只有一个属性访问器,重载后的属性也应只有一个。但如果基类的属性同时包含get和set属性访问器,重载后的属性可以只有一个,也可以同时有两个属性访问器。