很奇怪的设计,需要靠着两个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在转型过程中并不会丢失实例信息,但是函数不存在多态特性。

最新文章

  1. requestAnimationFrame,Web中写动画的另一种选择
  2. STM32——DMA接收和发送的实现
  3. HTML5 WebStorage
  4. iOS开发——UI进阶篇(十三)UITabBarController简单使用,qq主流框架
  5. sscanf函数和正则表达式
  6. usb驱动开发8之配置描述符
  7. 提示框的优化之自定义Toast组件之(二)Toast组件的业务逻辑实现
  8. Strange Towers of Hanoi
  9. Awesome Delphi
  10. 使用 sphinx 制作简洁而又美观的文档
  11. Unity塔防游戏开发
  12. 项目Beta冲刺Day3
  13. 简单介绍一下在CentOS上安装Docker。
  14. Confluence 6 审查日志
  15. 洛谷P3193 [HNOI2008]GT考试(dp 矩阵乘法)
  16. C++笔试易错题集(持续更新)
  17. dip和px的相互转化
  18. tomcat源码阅读之载入器(Loader)
  19. /usr/include/glib-2.0/glib/gtypes.h:34:24: fatal error: glibconfig.h: No such file or directory
  20. jquery控制元素的隐藏和显示的几种方法。

热门文章

  1. Objc基础学习记录2
  2. .Net项目版本号的生成
  3. 使用Canvas把照片转换成素描画
  4. 标准Dispose实现 (转)
  5. Codeforces Round #340 (Div. 2) D. Polyline 水题
  6. [每日一题] OCP1z0-047 :2013-08-06 外表部――相关描述
  7. NGINX源代码剖析 之 CPU绑定(CPU亲和性)
  8. TP复习12
  9. 垃圾回收GC:.Net自己主动内存管理 上(一)内存分配
  10. CENTOS YUM软件源