父类子类构造函数的执行顺序

ExpandedBlockStart.gif 代码
     class  Program
    {
        
     
class  A
     {
          
public  A(){
                PrintFields();
           }
          
public   virtual   void  PrintFields(){}
      }
     
class  B : A
     {
         
int  x  =   1 ;
         
int  y;
         
public  B() // new B()时会先new父对象A
         {
             y 
=   - 1 ;
         }
         
public   override   void  PrintFields()
         {
             Console.WriteLine(
" x={0},y={1} " , x, y);
         }
     }

        
static   void  Main( string [] args)
        {
            B b 
=   new  B();
            
//  当使用new B()创建B的实例时,产生什么输出?
            
//  答案:输出为x=1,y=0
            
// (继承的子类在new时,先new父类对象,然后new自身私有成员,当调用b.PrintFields()时,则输出x=1,y=-1)

        }
    }

 

ExpandedBlockStart.gif 代码
namespace  ConsoleApplication2
{
    
    
class  A
    {
        
public   static   int  X;
        
static  A()
        {
            X 
=  B.Y  +   1 ;
        }
    }
    
class  B
    {
        
public   static   int  Y  =  A.X  +   1 // 执行该语句时,会先执行A的构造函数
         static  B() { }
        
static   void  Main()
        {
            Console.WriteLine(
" X={0},Y={1} " , A.X, B.Y);
            
// 产生的输出结果是什么? X=1,Y=2

        }
    }

}

 

 

转载于:https://www.cnblogs.com/hubcarl/archive/2010/03/01/1675325.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值