C Sharp中的Virtual、Override和new关键词理解

来源:互联网 发布:万网独立域名管理 编辑:程序博客网 时间:2024/05/01 12:39

在 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 cars = new List();        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 Car!【Minivan】
Base Car!【DerivedConvertibleCar】
Base Car!
Minivan Car!
DerivedMinivan Car!【DerivedMinivan 】

可以看到使用new和使用override的效果是不一样的。

原创粉丝点击