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在转型过程中并不会丢失实例信息,但是函数不存在多态特性。

  • 相关阅读:
    教你一招用 IDE 编程提升效率的骚操作!
    动态拼接sql语句工具类
    mysql数据建模规范
    分割字符串为数字列表
    linux 配置mysql odbc
    nodejs npm常用命令
    (四)jquery easyui panel window使用
    (三)jquery easyui常用form控件的使用
    (二)jquery easyUI提示框的使用
    (一)jQuery easyUI 环境的搭建
  • 原文地址:https://www.cnblogs.com/jjseen/p/5112227.html
Copyright © 2011-2022 走看看