zoukankan      html  css  js  c++  java
  • 【CSharp】一个让你了解csharp的多态的程序

    using System;
    class A
    {
        public void show()
        {
            Console.WriteLine("A.show");
        }
        public virtual void play()   //定义为“virtual”,表明可以过载,不能过载非虚函数
        {
            Console.WriteLine("A.play");
        }
    }
    class B : A
    {
        public void show()  //覆盖(隐藏)A中的show方法,不加“show”,会编译警告
        {
            Console.WriteLine("B.show");
        }
        public override void play()   //过载A中的play方法,如果不加“override”,警告。
        {
            Console.WriteLine("B.play");
        }
    }
    class C : A
    {
        new public void show()    //隐藏A中的show方法,加“show”,不会编译警告
        {
            Console.WriteLine("C.show");
        }
        new public void play()  //隐藏A中的play方法,但是不构成过载,相当于另一个方法
        {
            Console.WriteLine("C.play");
        }
    }
    class D
    {
        public static void Main(string[] args)
        {
            A a = new A();
            B b = new B();
            C c = new C();

            a.show();
            a.play();

            b.show();
            b.play();

            c.show();
            c.play();

            a = b;
            a.show();
            a.play();

            a = c;
            a.show();
            a.play();
        }
    }
    输出结果为:
    A.show
    A.play
    B.show
    B.play
    C.show
    C.play
    A.show
    B.play
    A.show
    A.play

    注:在翻译中,作者对“override”,“new”,“overload”的翻译比较混乱,比如都有“覆盖”,“隐藏”,“重载”,“过载”等,但是个人认为:
    override----过载
    new---------覆盖、隐藏
    overload---重载
    比较贴切,当然,如何翻译并不重要,关键是区别他们之间的区别。
    override 的方法必须是:被声明为virtual的方法,其中可以过载,也可以不过载;被声明为abstract的方法,必须被override方法过载。过载之后可以实现多态性-动态联编。
    new:声明的方法用于隐藏基类中声明的同名函数,它与基类中的同名函数没有任何关系,仅仅同名而已。与多态无关。
    overload:重载,就是定义不同签名的同名方法,也是多态性的一种表现。

  • 相关阅读:
    [Laravel] mac下通过 homestead 搭建环境 到运行项目
    Mac下Laravel的Homestead环境配置
    Window10 下安装 Laravel / Homestead 视频
    Windows 10下Laravel的开发环境安装及部署(Vagrant + Homestead)
    Apache 调用不同的 PHP 版本
    inux系统用户名和全名有什么区别
    oracle 学习day01
    rpm
    Linux下可以使用ps命令来查看Oracle相关的进程
    oracle 建用户
  • 原文地址:https://www.cnblogs.com/gaojing/p/724407.html
Copyright © 2011-2022 走看看