zoukankan      html  css  js  c++  java
  • C#中的virtual & override

      很奇怪的设计,需要靠着两个Keyword共同作用,才能完成多态——而不是类似Java那样的默认多态。所谓共同作用,即基类使用virtual 标示函数,子类使用override显示重写。

      有点奇怪,MSDN说了一大堆情境,但我仍然认为增加了多义性与复杂性。

    class MainClass
        {
            public static void Main (string[] args)
            {
             
                var s1 = new Student ("Jim");
                s1.Say ();
                s1.Do ();

                var p1 = s1 as Person;
                p1?.Say ();
                p1?.Do ();

                var s2 = p1 as Student;
                s2?.Say ();
                s2?.Do ();


            }
        }

        class Person
        {
            public string Name { get; set;} = string.Empty;

            public Person(string name)
            {
                Name = name;
            }

            public  void Say()
            {
                WriteLine ($"{Name} Says:");
            }

            public virtual void Do()
            {
                WriteLine ($"{Name} Do:");
            }
        }


        class Student : Person
        {

            public Student(string name) : base(name)
            {
            }

            public  void Say()
            {
                WriteLine ($"Student {Name} Says:");
            }


            public override void Do()
            {
                WriteLine ($"Student {Name} Do:");
            }
                
        }

    Output:

      Student Jim Says:
      Student Jim Do:
      Jim Says:
      Student Jim Do:
      Student Jim Says:
      Student Jim Do:

    不使用virtal & override在转型过程中并不会丢失实例信息,但是函数不存在多态特性。

  • 相关阅读:
    软件开发与定制报价
    C# HttpHelper 1.0正式版发布
    C#仿QQ皮肤-TextBox 控件实现
    HTML5学习笔记第一节(智能提示和视频音频标签)
    C#多线程|匿名委托传参数|测试您的网站能承受的压力|附源代码升级版
    JavascriptHelp
    我的个人博客论坛版建立啦!
    Win7 + VirtualBox安装Mac OS X雪豹操作系统图文详解
    Sql2005性能工具(SQL Server Profiler和数据库引擎优化顾问)使用方法详解
    Webcast 系列课程 NET最全,最权威的学习资源
  • 原文地址:https://www.cnblogs.com/jjseen/p/5112227.html
Copyright © 2011-2022 走看看