漫漫技术人生路

C#

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::


using System;
public class A
{
  public A()
{
PrintFields();
}
public virtual void PrintFields(){}
}

public  class B:A
{
int x=1;
int y;
public B()
{
y=-1;
}
  public override void PrintFields()
  {
  Console.WriteLine("x={0},y={1}", x, y);
  }
}

问 new 一个类B的时候会有什么结果,请达人给出正确解释

的确是x=1,y=0
B继承了A,初始化B时是先调用A的构造函数的。即public A(){PrintFields();}由于A中的PrintFields()是虚拟的,实际上调用的是B中重写的public override void PrintFields(),这时候B并没有初始化即没有y=-1发生。c#对没赋值的变量默认为0.所以输出的自然是x=1,y=0。
之后才调用B的构造函数这时y=-1。


继承,构造顺序的问题,1,0正确
静态构造函数
using System;
class A
{
    public static int X;

    static A()
    {
        X = B.Y + 1;
        Console.WriteLine("static A()");
    }
}

class B
{
    public static int Y = A.X + 1; 

    static B(),
    {
        Console.WriteLine("static B()");
    }

    static void Main() //① 程序入口,
    {
        Console.WriteLine("X = {0}, Y = {1}", A.X, B.Y);//⑤ 输出结果
        Console.ReadLine();
    }
}
/**************************************************
* 静 态 构 造 函 数 练 习
*
* 输出结果: static A()
* static B()
* X = 1, Y = 2

posted on 2007-05-08 13:15  javaca88  阅读(325)  评论(0编辑  收藏  举报