关于c#继承

如下代码所示:最后输出的是:8,3,7,4

public class A
{
public virtual void One(int i)
{
Console.Write(i);
}
public virtual void Two(A a)
{
a.One(7);
One(3);
}
}
public class B : A 
{
public override void One(int i)
{
base.One(i+1);
}
}

static void Main(string[] args)
{
A a = new A();
B b = new B();
a.Two(b);
b.Two(a);

}

1、当 a调用Two方法的时候,传入进去的四b的实例,这时候就会调用b的One方法,从而输出8

2、这是a当中的Two方法中的One,还是会调用a中的One方法,所以会输出3

3、b.Two(a),出入a的实例。因为b是继承自a的,所以b也同样的有Two()方法,而b没有重写Two方法,所以还是调用父类a的Two方法,先执行a.One()输出7.

4、当执行完a.One(),之后接着执行One(),这个时候,因为b重写了a中的One方法,所以会执行b中的One()方法。输出4.

原文地址:https://www.cnblogs.com/cindyLu/p/3182323.html