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
谢谢
解决方案 »
- 网站在vs中调试成功,本地访问却又不行了
- ASP.NET控件刷新问题(C#)
- 关于解决方案中引用的问题!
- 关于Web.config里老是报错的问题(未找到元.....的信息)
- 在javascript里获取 cookie的值 并把值引用到<link href="所以获得的cookie值" rel="stylesheet" id="myCss" type="text/css" />
- 怎样让DataGrid根据不同的用户权限判断是否显示:编辑列,删除列?
- CACHE SESSION的用法。高手指点迷津!?杨哥??
- 客户端操作TreeView另一个问题,如何获得某个节点的父节点?(江雨兄你放假了吗?)
- 在asp.net中,如何在新的页面打开连接?
- 高手请进:如何用Response.Write()调用页面中的js函数
- 请问在类库中怎么取得网站的根目录的物理地址?
- 我们有一个虚拟主机,数据库是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
*/
}
}