• C#中abstract与virtual的用法


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

    1.第一种情况

    //抽象动物类,声明抽象方法Shout(),注意抽象方法没有方法体
    abstract class Animal
        {
            public abstract void Shout();
        }
    // 猫类,继承动物类,覆盖抽象Shout()方法
    class Cat:Animal
        {
            public Cat()
            {
            }
    
            public override void Shout()
            {
                Console.WriteLine("喵喵!");
            }
        }
    // 狗类,继承动物类,覆盖抽象Shout()方法   
     class Dog:Animal
        {
            public Dog()
            {
            }
    
            public override void Shout()
            {
                Console.WriteLine("汪汪!");
            }
        }
    // 客户程序调用
    static void Main(string[] args)
            {
                Animal cat = new Cat();
                cat.Shout();
                Animal dog = new Dog();
                dog.Shout();
                Console.ReadKey();
            }

    运行结果如下:

    image

    2.第二种情况

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

    abstract class Animal
        {
            public virtual void Shout()
            {
                Console.WriteLine("动物叫!");
            }
        }

    运行结果依旧:

    image

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

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

    image

  • 相关阅读:
    kafka 安装和基本操作
    IPv6表示方法及其简化方法
    Python print输出函数
    同步工具之Vector X
    golang之热加载Fresh&air X
    TOML 1.0格式语法 X
    PHPstorm配置webserver X
    编程辅助工具之Kite X
    golang项目之Makefile X
    高性能消息队列之nsq X
  • 原文地址:https://www.cnblogs.com/liming1019/p/1653728.html
Copyright © 2020-2023  润新知