在 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...)|编辑|收藏