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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值