有如下的代码
public class A
{
public virtual void Fun1()
{
Console.WriteLine("1");
}
public virtual void Fun3()
{
Console.WriteLine("2");
}
public void Fun2()
{
Fun3();
}
}
public class B : A
{
public new void Fun3()
{
Fun1();
}
public override void Fun1()
{
Console.WriteLine("3");
}
}
实例化类B后调用Fun2,输出结果是2
B b = new B();
b.Fun2();
如果把B类的的 Fun3()的new 修饰符修改成 override 则结果是3
我不理解的是
public void Fun2()
{
Fun3();
}
方法Fun2中对于 Fun3 是一个什么样的调用机制
是否能看到方法在调用过程中的IL代码,谢谢
http://www.cnblogs.com/f1194361820/p/3897999.html
这篇博客应该可以帮到你的
凡是使用this(默认不带this)的方法、属性都是当前实体能直接调用(访问)的。
1、当你在B中对fun3使用new后,那么new后的fun3不是类A中的fun2能访问的,所以,此时输出的结果是2(类A中Fun3的执行)。
2、当你把B对fun3的new去掉后,这个时候,fun3被重载,此时fun2调用的是重载后的fun3,也就是类B中的fun3,也就转而调用了fun1。
3、同理,类B的fun3里调用fun1时,无论fun1是否new,都会调用类B里的fun1,也就输出了3
4、如果,你在类B的fun3里把fun1的调用修改为:base.Fun1(),则输出的是类A里的结果。
这个问题你可以参考下:http://q.cnblogs.com/q/64766/