public class A
{
public virtual void Fun1(int i)
{
Console.WriteLine(i);
}public void Fun2(A a)
{
a.Fun1(1);
Fun1(5);
}
public class B : A
{
public override void Fun1(int i)
{
base.Fun1(i + 1);
} B b = new B();
A a = new A();
a.Fun2(b);
b.Fun2(a);
解释一下,为什么输出的是2,5,1,6
谢谢
{
public virtual void Fun1(int i)
{
Console.WriteLine(i);
}public void Fun2(A a)
{
a.Fun1(1);
Fun1(5);
}
public class B : A
{
public override void Fun1(int i)
{
base.Fun1(i + 1);
} B b = new B();
A a = new A();
a.Fun2(b);
b.Fun2(a);
解释一下,为什么输出的是2,5,1,6
谢谢
解决方案 »
- 求助、求助!!关键字 'User' 附近有语法错误。 ASP.NET
- 庆国庆、迎中秋;【请教】关于高并发
- cookie是不是浏览器一关掉就没有了啊
- DataView的遍历问题
- 一个超级搜索难题,《狂vee 夺蟒d之在有灾2搜和寻在血2e有兰》这样都可以搜索出正确的数据来。
- 为什么VS.NET2005的普通视图打不开,只能打开源代码视图????
- 求助关于加密解密的问题!!
- 有关datagrid的小问题?
- 动态数组累增问题
- aspx文件出现下载的现象,如何解决?
- 请问在类库中怎么取得网站的根目录的物理地址?
- 我们有一个虚拟主机,数据库是sqlserver2k,现在想要备份,把整个库备份到我自己的机子上,如何做到,给个最常用的解决方法
a.Fun2(b);
public void Fun2(A a)
{
a.Fun1(1); //参数a实际上是个属于B的对象,将调用在B中覆盖的相应方法
//但其实现是base.Fun1(i + 1),即A类中的Fun1,参数是2,所以输出为2 Fun1(5); //当前对象是个属于A的对象,就调用A类中相应的方法,所以输出为5
}2.
b.Fun2(a);
public void Fun2(A a)
{
a.Fun1(1); //参数a实际上是个属于A的对象,将调用在即A类中的Fun1,参数是1,所以输出为1 Fun1(5); //当前对象是个属于B的对象,调用B中覆盖的相应方法,
//但其实现是base.Fun1(i + 1),即A类中的Fun1,参数是6,所以输出为6
}
{
public virtual void Fun1(int i)
{
Console.WriteLine(i);
} public void Fun2(A a)
{
a.Fun1(1);
Fun1(5);
}
}public class B : A
{
public override void Fun1(int i)
{
base.Fun1(i + 1);
} static void Main(string[] args)
{
B b = new B();
A a = new A();
a.Fun2(b);
//当前对象为基类对象,传的是派生类的对象
/*
a.Fun1(1);由于a指向派生类的对象,所以调用派生类override的方法(又调用了基类的Fun1),输出2
Fun1(5);相当于this.Fun1(5),所以调用自己的方法,输出5
*/
b.Fun2(a);
//当前对象为派生类对象,传的是基类的对象
/*
a.Fun1(1);由于a就是基类的对象,不存在多态的问题,调用自己的方法,输出2
Fun1(5);当前对象事实上派生类的对象,所以调用派生类的方法(又调用了基类的Fun1),输出6
*/
}
}