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);
}
public static void Main()
{
B b = new B();
A a = new A();
a.Fun2(b);
b.Fun2(a);
}
}
输出的结果为: 2 5 1 6其它的都能理解,但第一个输出为什么是2不是1呢?
请哪位高手详解下!!!
{
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);
}
public static void Main()
{
B b = new B();
A a = new A();
a.Fun2(b);
b.Fun2(a);
}
}
输出的结果为: 2 5 1 6其它的都能理解,但第一个输出为什么是2不是1呢?
请哪位高手详解下!!!
那么就是调用CLASS A 里面的FUN2();
参数是b,那么方法内部的FUN1就应该调用b.FUN1(1);
而b.FUN1()是重写了A.FUN1()的 public override void Fun1(int i)
{
base.Fun1 (i + 1);
}
如果传入的参数是i,应该调用a.FUN1(i+1)才对,所以应该是 Console.WriteLine(i+1)
{
B b = new B();
A a = new A();
a.Fun2(b);
}
这个地方转了一圈,还是调用的是b.fun1是你自己把自己搞晕了吧。