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

  • 相关阅读:
    学习笔记-级数
    闭包
    superfetch服务到底该不该关闭
    用tor进入“深网”
    浏览器内核
    媒体查询实现响应式布局
    oracle用浏览器界面管理数据库
    angular登录状态检查
    从输入网址后。。。。。。
    原型
  • 原文地址:https://www.cnblogs.com/liming1019/p/1653728.html
Copyright © 2011-2022 走看看