关于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.