C#关于虚方法和重写的实例说明(virtual 和override)
2012-11-07 17:36
549 查看
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleAppsTest { class Program { 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(); a.F1(); a.F2(); c.F1(); c.F2(); Console.ReadKey(); } } public class A { public virtual void F() { Console.WriteLine("A.F"); } public void F1() { Console.WriteLine("A.F1"); } public virtual void F2() { Console.WriteLine("A.F2"); } } public class B : A { public override void F() { Console.WriteLine("B.F"); } } public class C : B { new public virtual void F() { Console.WriteLine("C.F"); } new public void F1() { Console.WriteLine("C.F1"); } } public class D : C { public override void F() { Console.WriteLine("D.F"); } } }
执行结果如下:
说明:
就 类A 来说,其他类同:
A 是a 的声明类;D是实例类
在调用实例a的方法时,首先是在声明类A中找此方法,如果有此方法并且是非虚方法,就直接执行该方法;如果有此方法并且是虚方法,就在A的子类中找,如果在子类B中找到该方法的重写,就执行B中的重写方法;如果没有找到B中对该方法的重写,就执行A类的虚方法。注意:如果A a =new A();调用a的方法时,都执行A类自己的方法。
如果有子类new 一个方法时,就表示覆盖了基类的该方法,调用时就执行自己的new方法;
如果子类中没有该方法,调用基类的方法时,执行基类的方法。
相关文章推荐
- Java学习8:封装特性之方法的重写(Override)详解及实例说明
- 关于override 与new 重写父类虚方法的一些看法(new与virtual共存)
- C#关于虚方法 virtual 和 override 重写 详解
- 接口,抽象类,虚方法,重写(interface,abstract class,virtual function,override)
- 关于java方法的重载(Overloading),覆写(Override)以及final 方法的几点说明
- 关于 类的 virtual 实例 说明 (c#)
- 关于java方法的重载(Overloading),覆写(Override)以及final 方法的几点说明
- 【原创】关于java对象需要重写equals方法,hashcode方法,toString方法 ,compareto()方法的说明
- 关于java方法的重载(Overloading),覆写(Override)以及final 方法的几点说明
- 关于Eclipse 自动重写某父类或者接口的方法@override
- 【KK学习笔记】c# 虚方法 virtual 、 重写方法 override 、new 的使用与理解
- 接口,抽象类,虚方法,重写(interface,abstract class,virtual function,override)
- C#中子类重写父类方法的几种情况(virtual,abstract,override,new)
- 黑马程序员 Class(类),Override(重写),Virtual(虚方法)
- override 与new 重写父类虚方法 (new与virtual共存)
- 关于方法的重写 Override
- C#调用父类构造方法(:base())与重写父类方法(virtual/override)
- C#基础:多态:基类可以定义并实现虚(virtual)方法,派生类可以重写(override)这些方法
- 关于子类重写父类方法override
- java基础---方法的重载(overload)和覆盖(重写)(override)