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()的时候,输出什么结果?请思考后查看答案:http://www.svnhost.cn/Article/Detail-226.shtml
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()的时候,输出什么结果?请思考后查看答案:http://www.svnhost.cn/Article/Detail-226.shtml
{
PrintFields();
}
,B的没处理呢.
答案是这样的:new B()的时候,产生的是B的实例,B是继承自A,首先初始化类里的“全局变量”x=1,y=0,然后调用父类A的初始化方法A(),再调用B()另外:A()里调用PrintFields(),因为对象是B的实例,而B重写了PrintFields()方法,因此调用PrintFields()方法应该是B的PrintFields(),即执行输出。所以整体流程是:初始化“全局变量”->调用A()->调用Console.WriteLine("x={0},y={1}",x,y);
输出结果是:x=1,y=0其实问题并不复杂,只是不小心就会错。大家可以用小巧的.NET开发工具SnippetCompiler测试。
貌似是广告。
{
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()的时候,输出什么结果?
经典