zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Nginx 七层反向代理
    Nginx Rewrite域名及资源重定向!(重点)
    对FPM 模块进行参数优化!
    Nginx压力测试及通用优化
    LNMP架构及应用部署!(重点)
    安装PHP解析环境!
    Mysql安装并修改字符集 ----> 基于源码包安装
    Nginx安装部署!
    python入门
    Android学习进度三
  • 原文地址:https://www.cnblogs.com/liming1019/p/1653728.html
Copyright © 2011-2022 走看看