有关C#继承的一道面试题目?

来源:百度知道 编辑:UC知道 时间:2024/05/24 15:53:27
public class A
{
public virtual void Fun1(int i)
{
Console.WriteLine(i);
}
public void Fun2(A a)
{
a.Fun1(1);
a.Fun1(5);
}
}

public class B:A
{
public overvide 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
6
1
5

B b = new B();
A a = new A();
a.Fun2(b);
b.Fun2(a);

a.Fun2(b);因为B是继承A的 所以A类中 a.Fun1(1) 其实就是b.Fun1(1) 有因为A中的Fun1是虚方法 B中进行复写
所以a.Fun1(1) 应执行B中的Fun1(1) 方法 所以输出2 同理a.Fun1(5) 也就输出6了

b.Fun2(a);因为B中没有复写Fun2() 所以b.Fun2()就是a.Fun(); 所以输出 1,5

所以结果就是 2 6 1 5

答案仅供参考!!

Main()中第一步a.Fun2(b);执行A类方法中的
Fun2方法,转来就得到b.Fun1(1); b.Fun1(5);->base.Fun1(1+1);base.Fun1(5+1);->Console.WriteLine(2);Console.WriteLine(6);->得到2和6
第二部b.Fun2(a);执行b方法中的Fun2方法,也就是他的父类A中的Fun2方法,得到 a.Fun1(1); a.Fun1(5);->Console.WriteLine(1);Console.WriteLine(5);->得到值1和5.
总结:得到的值为2,6,1,5