Virtual、Override和New关键字的使用
2008-01-02 17:32
423 查看
当一个方法被声明为Virtual时,它是一个虚拟方法,直到你使用ClassName variable = new ClassName();声明一个类的实例之前,它都不存在于真实的内存空间中。这个关键字在类的继承中非常常用,用来提供类方法的多态性支持。
virtual修饰的方法为虚方法,暗示其子类最好有自己的实现。
override修饰的方法为重写方法,表示覆盖了基类原有方法的实现。
new 关键字可以隐藏基类的方法,包括虚方法。
通过下面的实例我们可以了解它们的具体使用,以及他们的区别。
Override和New区别
* 重写基类的方法,使用override关键字。 * 重写将替换基类的代码,即使通过基类访问也是这样。例如:
* Student s1 = new Student();//Hello student,Hello student
s1.Say(); //Hello student
*隐藏基类的方法,用new关键字,尽管隐藏了基类的执行代码,但仍可以通过基类访问它,不管是虚拟方法还是非虚拟方法。例如:
* Person t2 = new Teacher(); //Hello Person! Hello Teacher!
t2.Say(); //Hello Person
*
扩展实例:
结果是:
2、5、1、6
virtual修饰的方法为虚方法,暗示其子类最好有自己的实现。
override修饰的方法为重写方法,表示覆盖了基类原有方法的实现。
new 关键字可以隐藏基类的方法,包括虚方法。
通过下面的实例我们可以了解它们的具体使用,以及他们的区别。
class Person { /// <summary> /// /// </summary> public Person() { Say(); } /// <summary> /// /// </summary> public virtual void Say() { Console.WriteLine("Hello Person!"); } } class Student:Person { /// <summary> /// /// </summary> public Student() { Say(); } /// <summary> /// /// </summary> public override void Say() { System.Console.WriteLine("Hello Student!"); } } class Teacher : Person { /// <summary> /// /// </summary> public Teacher() { Say(); } /// <summary> /// /// </summary> public new void Say() { Console.WriteLine("Hello Teacher!"); } } class Program { static void Main(string[] args) { Student s1 = new Student();//Hello student,Hello student s1.Say(); //Hello student Console.WriteLine("------------------------------------"); Person s2 = new Student(); //Hello student,Hello student s2.Say(); //Hello student Console.WriteLine("------------------------------------"); Teacher t1 = new Teacher(); //Hello Person!Hello Teacher! t1.Say(); //Hello Teacher! Console.WriteLine("------------------------------------"); Person t2 = new Teacher(); //Hello Person! Hello Teacher! t2.Say(); //Hello Person } }
Override和New区别
* 重写基类的方法,使用override关键字。 * 重写将替换基类的代码,即使通过基类访问也是这样。例如:
* Student s1 = new Student();//Hello student,Hello student
s1.Say(); //Hello student
*隐藏基类的方法,用new关键字,尽管隐藏了基类的执行代码,但仍可以通过基类访问它,不管是虚拟方法还是非虚拟方法。例如:
* Person t2 = new Teacher(); //Hello Person! Hello Teacher!
t2.Say(); //Hello Person
*
扩展实例:
public class A { public virtual void Fun1(int i) { Console.WriteLine(i); } public void Fun2(A a) { a.Fun1(1); Fun1(5); } } public class B : A { public override void Fun1(int i) { base.Fun1 (i + 1); } public static void Main() { B b = new B(); A a = new A(); a.Fun2(b); b.Fun2(a); } }
结果是:
2、5、1、6
相关文章推荐
- new、abstract、virtual、override,sealed关键字区别和使用代码示例
- new、abstract、virtual、override,sealed关键字区别和使用代码示例
- new、abstract、virtual、override,sealed关键字区别和使用代码示例
- new、abstract、virtual、override关键字的使用
- C#多态;父类引用指向子类对象;new和override的区别;new、abstract、virtual、override,sealed关键字区别和使用代码示例;c#类的初始化顺序
- 关键字virtual,override,new的使用
- new、abstract、virtual、override,sealed关键字区别和使用代码示例
- c#中abstract、override、new、virtual、sealed使用和示例
- 浅析C#中new、override、virtual关键字的区别
- c#中abstract、override、new、virtual、sealed使用和示例
- 深入理解virtual/new/override 这些关键字的意义
- c#编程之使用 Override 和 New 关键字进行版本控制
- C#继承之base,virtual,override,abstract,new,sealed关键字
- 浅析C#中new、override、virtual关键字的区别
- 【转】virtual override new 的关系和使用
- C# 关键字 abstract, virtual, override, sealed, new
- 使用 Override 和 New 关键字进行版本控制(C# 编程指南)
- C#的主要 关键字 new、sealed、partial、interface、virtual、abstract、this、base、override、return、break、continue...
- c#的new、abstract、virtual、override,sealed关键字区别
- [转]virtual override new 的关系和使用