![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.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)
}
}
{
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)
}
}
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.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
}
}
}
{
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
}
}
}