日期:2014-05-17 浏览次数:20480 次
public class A { public void F() { Console.WriteLine("A.F"); Console.ReadLine(); } public virtual void G() { Console.WriteLine("A.G"); Console.ReadLine(); } } public class B : A { new public void F() { Console.WriteLine("B.F"); Console.ReadLine(); } public override void G() { Console.WriteLine("B.G"); Console.ReadLine(); } } static void Main(string[] args) { B b = new B(); A a = b; a.F(); b.F(); a.G(); b.G(); }
public class A { public virtual void F() { Console.WriteLine("A.F"); Console.ReadLine(); } } public class B : A { public override void F() { Console.WriteLine("B.F"); Console.ReadLine(); } } public class C : B { new public virtual void F() { Console.WriteLine("C.F"); Console.ReadLine(); } } public class D : C { public override void F() { Console.WriteLine("D.F"); Console.ReadLine(); } } static void Main(string[] args) { D d = new D(); A a = d; B b = d; C c = d; a.F(); b.F(); c.F(); d.F(); }
static void Main(string[] args) { B b = new B(); A a = b; a.F(); b.F(); a.G(); b.G(); }
------解决方案--------------------
new 是表示实例化一个对象,而且内存会分配内存给对象 其他的东西都是引用该内存对象
------解决方案--------------------
1.方法定义了virtual,用的时候和正常方法一样,子类继承,没有重写的话,也和平常方法一样
2.子类继承重写之后,如果没用调用base.XXX()就完全按重写后内容
3.子类重写并且调用了base.XXX()就会在相应地方掉父类方法
------解决方案--------------------