C#中的Virtual、Override和new关键词理解
2014-06-30 11:31
459 查看
来源:http://blog.csdn.net/jackiezhw/article/details/2673992
在 C# 中,派生类可以包含与基类方法同名的方法。
基类方法必须定义为 virtual。
如果派生类中的方法前面没有 new 或 override 关键字,则编译器将发出警告,该方法将有如存在 new 关键字一样执行操作。
如果派生类中的方法前面带有 new 关键字,则该方法被定义为独立于基类中的方法。
如果派生类中的方法前面带有 override 关键字,则派生类的对象将调用该方法,而不是调用基类方法。
可以从派生类中使用 base 关键字调用基类方法。
override、virtual 和 new 关键字还可以用于属性、索引器和事件中。
输出结果:
可以看到使用new和使用override的效果是不一样的。
在 C# 中,派生类可以包含与基类方法同名的方法。
基类方法必须定义为 virtual。
如果派生类中的方法前面没有 new 或 override 关键字,则编译器将发出警告,该方法将有如存在 new 关键字一样执行操作。
如果派生类中的方法前面带有 new 关键字,则该方法被定义为独立于基类中的方法。
如果派生类中的方法前面带有 override 关键字,则派生类的对象将调用该方法,而不是调用基类方法。
可以从派生类中使用 base 关键字调用基类方法。
override、virtual 和 new 关键字还可以用于属性、索引器和事件中。
using System; using System.Collections.Generic; public class Car { public virtual void DescribeCar() { Console.WriteLine("Base Car!"); } } public class ConvertibleCar : Car { public new void DescribeCar() { base.DescribeCar(); Console.WriteLine("Convertible Car!"); } } public class DerivedConvertibleCar : ConvertibleCar { public new void DescribeCar() { base.DescribeCar(); Console.WriteLine("DerivedConvertibleCar Car!"); } } public class DerivedMinivan : Minivan { public override void DescribeCar() { base.DescribeCar(); Console.WriteLine("DerivedMinivan Car!"); } } public class Minivan : Car { public override void DescribeCar() { base.DescribeCar(); Console.WriteLine("Minivan Car!"); } } public class CarCollections { public static void Main() { List<CAR> cars = new List<CAR>(); cars.Add(new Car()); cars.Add(new ConvertibleCar()); cars.Add(new Minivan()); cars.Add(new DerivedConvertibleCar()); cars.Add(new DerivedMinivan()); foreach (Car car in cars) car.DescribeCar(); } }
输出结果:
Base Car!【Car】 Base Car!【ConvertibleCar】 Base Car!【Minivan】 Minivan Car! Base Car!【DerivedConvertibleCar】 Base Car!【DerivedMinivan 】 Minivan Car! DerivedMinivan Car!
可以看到使用new和使用override的效果是不一样的。
相关文章推荐
- c#中关于virtual,override和new的理解
- 深入理解C#中new、override、virtual关键字的区别
- 我理解c#中的interface abstract virtual override和new(转)
- 谈谈C#中的三个关键词new , virtual , override
- 谈谈C#中的三个关键词new , virtual , override(装载 Winner.Net)
- 谈谈C#中的三个关键词new , virtual , override
- 谈谈C#中的三个关键词new , virtual , override
- 谈谈C#中的三个关键词new , virtual , override
- 谈谈C#中的三个关键词new , virtual , override
- 谈谈C#中的三个关键词new , virtual , override
- C#中的三个关键词new , virtual , override的区别
- C#中的三个关键词new , virtual , override
- 谈谈C#中的三个关键词new , virtual , override
- 【KK学习笔记】c# 虚方法 virtual 、 重写方法 override 、new 的使用与理解
- 谈谈C#中的三个关键词new , virtual , override
- 谈谈C#中的三个关键词new , virtual , override
- 我理解c#中的interface abstract virtual override和new
- 理解c#中的interface abstract virtual override和new(转)
- 谈谈C#中的三个关键词new , virtual , override
- 浅析C#中new、override、virtual关键字的区别