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

代码
    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)

        }
    }

 

代码
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

        }
    }

}

 

 

posted @ 2010-03-01 00:26  Blue Sky ......  阅读(492)  评论(0编辑  收藏  举报