![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.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://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.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
}
}
}