public class MyTest
{ public class B : A
{
public override void Fun1(int i)
{
base.Fun1(1);
} public static void Main()
{
B b = new B();
A a = new A();
b.Fun2(b);
b.Fun2(a);
Console.ReadLine();
}
}
public class A
{
public virtual void Fun1(int i)
{
Console.WriteLine(i);
}
public void Fun2(A a)
{
a.Fun1(1);
Fun1(5);
}
}
}请帮忙解释下得到结果是 1,5,1,1的原因
额贴错了如下public class MyTest
{ public class B : A
{
public override void Fun1(int i)
{
base.Fun1(1);
} public static void Main()
{
B b = new B();
A a = new A();
a.Fun2(b);
b.Fun2(a);
Console.ReadLine();
}
}
public class A
{
public virtual void Fun1(int i)
{
Console.WriteLine(i);
}
public void Fun2(A a)
{
a.Fun1(1);
Fun1(5);
}
}
}解释下为 1,5,1,1的原因
第二句没有限定那么就是调用者(b)的方法base.Fun1(1);同理a.Fun2(a),
所以结果是:
1
1
1
1
光标在此处
a.Fun2(b)没什么可说的,自己的类的实例调用自己的方法,一步一步来
b.Fun2(a)是B的实例它的Fun2方法是继承自A的,第一句话有a.这就限定了方法的具体位置
第二句没有限定,那么默认就是本类里的方法了,所以Fun1(5)相当与b.Fun1(5),那么输出的就是1