zoukankan      html  css  js  c++  java
  • C#中的abstract与virtual的用法

    关于C#中的abstract与virtual的用法一直迷糊。于是自己动手写一写试试。

    1.第一种情况

    1 //抽象动物类,声明抽象方法Shout(),注意抽象方法没有方法体
    2 abstract class Animal
    3 {
    4 public abstract void Shout();
    5 }
    01 // 猫类,继承动物类,覆盖抽象Shout()方法
    02 class Cat:Animal
    03 {
    04 public Cat()
    05 {
    06 }
    07
    08 public override void Shout()
    09 {
    10 Console.WriteLine("喵喵!");
    11 }
    12 }
    01 // 狗类,继承动物类,覆盖抽象Shout()方法
    02 class Dog:Animal
    03 {
    04 public Dog()
    05 {
    06 }
    07
    08 public override void Shout()
    09 {
    10 Console.WriteLine("汪汪!");
    11 }
    12 }
    1 // 客户程序调用
    2 static void Main(string[] args)
    3 {
    4 Animal cat = new Cat();
    5 cat.Shout();
    6 Animal dog = new Dog();
    7 dog.Shout();
    8 Console.ReadKey();
    9 }

    运行结果如下:

    image

    2.第二种情况

    如果用virtual,Animal类则修改如下,注意虚方法要有方法体。

    1 abstract class Animal
    2 {
    3 public virtual void Shout()
    4 {
    5 Console.WriteLine("动物叫!");
    6 }
    7 }

    运行结果依旧:

    image

    在第一种情况下,由于子类必须要实现基类的抽象方法,所以如果把Cat类的Shout()方法去掉,程序编译会报错。

    但是在第二种情况下,如果把Cat类的Shout()方法去掉,则客户端没有覆盖基类的Shout()方法,cat.Shout()会调用基类的Shou()方法。运行结果如下:

    image

  • 相关阅读:
    c#多线程控制
    SQL解析XML文件
    c#时间差高精度检查
    SQL Server数据库级别触发器
    c#做对比软件
    项目管理开源软件
    信息量、信息熵、交叉熵、相对熵
    GAN评价指标之mode score
    Fréchet Inception Distance(FID)
    图片的多样性之模式崩溃
  • 原文地址:https://www.cnblogs.com/lmfeng/p/2168662.html
Copyright © 2011-2022 走看看