• C#中的Virtual


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

    • 基类方法必须定义为 virtual

    • 如果派生类中的方法前面没有 newoverride 关键字,则编译器将发出警告,该方法将有如存在 new 关键字一样执行操作。

    • 如果派生类中的方法前面带有 new 关键字,则该方法被定义为独立于基类中的方法。

    • 如果派生类中的方法前面带有 override 关键字,则派生类的对象将调用该方法,而不是调用基类方法。

    • 可以从派生类中使用 base 关键字调用基类方法。

    • overridevirtualnew 关键字还可以用于属性、索引器和事件中。

    默认情况下,C# 方法为非虚方法。如果某个方法被声明为虚方法,则继承该方法的任何类都可以实现它自己的版本。若要使方法成为虚方法,必须在基类的方法声明中使用 virtual 修饰符。然后,派生类可以使用 override 关键字重写基虚方法,或使用 new 关键字隐藏基类中的虚方法。如果 override 关键字和 new 关键字均未指定,编译器将发出警告,并且派生类中的方法将隐藏基类中的方法


       1:  using System;
       2:  using System.Collections.Generic;
       3:  using System.Linq;
       4:  using System.Text;
       5:   
       6:  namespace ConsoleApplication1
       7:  {
       8:      class Program
       9:      {
      10:          static void Main(string[] args)
      11:          {
      12:   
      13:              Car car1 = new Car();
      14:              car1.ShowAttribute();
      15:              System.Console.WriteLine("-------------------------");
      16:   
      17:   
      18:              Car car2 = new ConverDaZhong();
      19:              car2.ShowAttribute();
      20:              System.Console.WriteLine("-------------------------");
      21:   
      22:   
      23:              Car car3 = new Minivan();
      24:              car3.ShowAttribute();
      25:              System.Console.WriteLine("-------------------------");
      26:              System.Console.ReadKey();
      27:          }
      28:   
      29:   
      30:      }
      31:   
      32:      class Car
      33:      {
      34:          public virtual void ShowAttribute()
      35:          {
      36:              System.Console.WriteLine("这是一部汽车");
      37:          }
      38:      }
      39:   
      40:      class ConverDaZhong : Car
      41:      {
      42:          public new void ShowAttribute()
      43:          {
      44:              System.Console.WriteLine("这是一部大众汽车.");
      45:          }
      46:      }
      47:   
      48:      class Minivan : Car
      49:      {
      50:          public override void ShowAttribute()
      51:          {
      52:              //base.DescribeCar();
      53:              System.Console.WriteLine("这是一部MINI汽车");
      54:          }
      55:      }
      56:   
      57:  }
    输入 出结果
     

    image

  • 相关阅读:
    [转]C#获取程序当前路径的方法
    [解决办法]未在本地计算机上注册“Mircosoft.Jet.OleDB.4.0”提供程序
    [解决办法]正在尝试使用已关闭或释放并且不再有效的 SPWeb 对象
    PowerShell学习笔记
    DNS
    在C#编程中,如何将Excel保存为2003的格式
    SAAS相关网络资源
    LCID及Culture Name列表
    Microsoft's naming conventions (微软命名规范)
    C#中如何结束Excel (Office)进程
  • 原文地址:https://www.cnblogs.com/liulaocai2/p/3578167.html
Copyright © 2020-2023  润新知