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


    来源:http://blog.csdn.net/jackiezhw/article/details/2673992

    在 C# 中,派生类可以包含与基类方法同名的方法。

    • 基类方法必须定义为 virtual。
    • 如果派生类中的方法前面没有 new 或 override 关键字,则编译器将发出警告,该方法将有如存在 new 关键字一样执行操作。
    • 如果派生类中的方法前面带有 new 关键字,则该方法被定义为独立于基类中的方法。
    • 如果派生类中的方法前面带有 override 关键字,则派生类的对象将调用该方法,而不是调用基类方法。
    • 可以从派生类中使用 base 关键字调用基类方法。
    • override、virtual 和 new 关键字还可以用于属性、索引器和事件中。
     1 using System;  
     2 using System.Collections.Generic;  
     3   
     4   
     5 public class Car  
     6 {  
     7   
     8     public virtual void DescribeCar()  
     9     {  
    10         Console.WriteLine("Base Car!");  
    11     }  
    12   
    13 }  
    14   
    15   
    16 public class ConvertibleCar : Car  
    17 {  
    18     public new void DescribeCar()  
    19     {  
    20         base.DescribeCar();  
    21         Console.WriteLine("Convertible Car!");  
    22     }  
    23 }  
    24   
    25 public class DerivedConvertibleCar : ConvertibleCar  
    26 {  
    27     public new void DescribeCar()  
    28     {  
    29         base.DescribeCar();  
    30         Console.WriteLine("DerivedConvertibleCar Car!");  
    31     }  
    32 }  
    33   
    34   
    35 public class DerivedMinivan : Minivan  
    36 {  
    37     public override void DescribeCar()  
    38     {  
    39         base.DescribeCar();  
    40         Console.WriteLine("DerivedMinivan Car!");  
    41     }  
    42 }  
    43 public class Minivan : Car  
    44 {  
    45     public override void DescribeCar()  
    46     {  
    47         base.DescribeCar();  
    48         Console.WriteLine("Minivan Car!");  
    49     }  
    50 }  
    51   
    52   
    53 public class CarCollections  
    54 {  
    55     public static void Main()  
    56     {  
    57         List<CAR> cars = new List<CAR>();  
    58   
    59         cars.Add(new Car());  
    60         cars.Add(new ConvertibleCar());  
    61         cars.Add(new Minivan());  
    62         cars.Add(new DerivedConvertibleCar());  
    63         cars.Add(new DerivedMinivan());  
    64         foreach (Car car in cars)  
    65             car.DescribeCar();  
    66     }  
    67 }  


    输出结果:

    Base Car!【Car】
    Base Car!【ConvertibleCar】
    Base Car!【Minivan】
    Minivan Car!
    Base Car!【DerivedConvertibleCar】
    Base Car!【DerivedMinivan 】
    Minivan Car!
    DerivedMinivan Car!

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

  • 相关阅读:
    线性代数07.Ax=0:主变量,特解
    线性代数06.列空间和零空间
    线性代数05.转置、置换、向量空间
    线性代数04.A的LU分解
    线性代数03.矩阵的乘法和逆
    .线性代数02.矩阵消元
    KEIL中三种编译模式以及对变量空间的影响
    Python之常用模块(三)random模块和序列化
    Python之常用模块(二)time模块与datetime模块
    Python之常用模块(一)自定义模块
  • 原文地址:https://www.cnblogs.com/spriteflk/p/3816302.html
Copyright © 2020-2023  润新知