您的位置:首页 > 编程语言 > C#

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 关键字还可以用于属性、索引器和事件中。

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的效果是不一样的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: