原创  C Sharp中的Virtual、Override和new关键词理解 收藏

在 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的效果是不一样的。

发表于 @ 2008年07月18日 20:20:00 | 评论( loading... ) | 编辑| 举报| 收藏

旧一篇:我要学习的技术 | 新一篇:C++私有继承和保护继承-转载

  • 发表评论
  • 评论内容:
  •  
Copyright © Jackiezhw
Powered by CSDN Blog