日期:2014-05-19  浏览次数:20446 次

A a = new B(); 理解意义。
public   abstract   class   A    
{  
                public   A()    
              {  
                        Console.WriteLine( 'A ');  
                }  
                public   virtual   void   Fun()    
              {  
                        Console.WriteLine( "A.Fun() ");  
                }  
}  
public   class   B:   A    
{  
                public   B()  
              {  
                        Console.WriteLine( 'B ');  
                }  
                public   new   void   Fun()    
              {  
                        Console.WriteLine( "B.Fun() ");  
                }  
                public   static   void   Main()    
              {  
                      A   a   =   new   B();  
                      a.Fun();  
                }  
}  
这段程序A   a   =   new   B();     怎么理解呢?
执行顺序是:
先执行基类a的构造涵数,在来执行子类的构造涵数

------解决方案--------------------
A a = new B();

先实例化一个类B的对象,然后隐式类型转换为类A的对象,相当于
B b=new B();
A a=b;
------解决方案--------------------
执行结果如下:
A
B
A.Fun()

先A后B,即先父后子。
------解决方案--------------------
多态性. 就好比所有的类派生与object

------解决方案--------------------
凡是基类可以出现的地方,子类必然可以代替基类出现.
针对抽象编程.....

楼主找本设计模式书看看,就明白为什么有这样的表达了.
------解决方案--------------------
应该是这句执行吧
Console.WriteLine( "B.Fun() ");
------解决方案--------------------
这是纯玩概念了.

这段程序A a = new B(); 怎么理解呢?
---------------
是把B当成A来使用了.这样可能会丢失了B的特有的性质,比如用New声明的成员将不起作用!