昨天从网上看了道asp。net面试题。如下
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);
Console.ReadKey();
}
}
我的答案是1,5,2,6
答案是错的,运行时2,5,1,6
求详细解答过程。(有中间思路,越详细越好)
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);
Console.ReadKey();
}
}
我的答案是1,5,2,6
答案是错的,运行时2,5,1,6
求详细解答过程。(有中间思路,越详细越好)
A a = new A();
a.Fun2(b);
b.Fun2(a); 2,5,1,6中的2是由于B类重写了基类的Fun1,于是调用的是B类中的Fun11是因为调用的是A对象的Fun1,并没有调用重写的方法,所以是1
a.Fun2(b); a.public void Fun2(b)
{
b.Fun1(1);
a.Fun1(5);
}
b.Fun2(a);
b.public void Fun2(a)
{
a.Fun1(1);
b.Fun1(5);
}
a.Fun2(b);
this = a;
obj = b;
this.public void Fun2(obj)
{
obj.Fun1(1);
this.Fun1(5);
}b.Fun2(a);
this = b;
obj = a;
this.public void Fun2(obj)
{
obj.Fun1(1);
this.Fun1(5);
}