关于C#中 从未对字段***赋值,字段将一直保持其默认0

对于VS里面提示:

原来的代码如下:

Shape.cs中

1 abstract class Shape
2 {
3     protected double _area;
4     abstract public double Area
5     {
6         get;
7     }
8 }

Ellipse.cs中

1 class Ellipse:Shape
2 {
3     public override double Area
4     {
5     get 
6     {
7         return Math.PI * _semiMinorAxis * _semiMinorAxis;
8     }  
9 }

上面的提示是因为字段  _area  是protected的,而且在Area方法中又没有set方法。

要使上面的提示消失,需要在Shape类中声明set方法并在Ellipse类中重写set方法。

代码如下:

1 abstract class Shape
2 {
3     protected double _area;
4     abstract public double Area
5     {
6         get;
7         set;
8     }
9 }
 1 public override double Area
 2 {
 3     get 
 4     {
 5         return Math.PI * _semiMinorAxis * _semiMinorAxis;
 6     }
 7     set
 8     {
 9         _area = value;
10     }
11 }

这样当对属性Aera赋值的时候,_area字段便会被赋值。这样警告就会消失了。

推荐你看一下张子阳的博客。这里对C#中的各种面向对象的概念讲得很透彻。比如 C#中的委托和事件

 

 

 

posted @ 2013-05-28 19:51  feifei435  阅读(5142)  评论(0编辑  收藏  举报