zoukankan      html  css  js  c++  java
  • 虚方法(virtual)

    虚方法(virtual)

    Virtual 关键字用于修饰方法、属性、索引器或事件声明,并且允许在派生类中重写这些对象。

    看一段代码:

    using System ;

    class A

    {

        public void F()

        {

           Console.WriteLine ("A.F");

        }

    }

    class B:A

    {

        public new void F() //注意new关键字

        {

           Console.WriteLine ("B.F");

        }

    }

    class Test

    {

        static void Main()

        {

           B b = new B ();

           A a = b;

           a.F ();

           b.F();

        }

    }

    输出: A.F

           B.F

    上述代码在内存中如下图:

     

     

     

    再看一段代码:

    using System ;

    class A

    {

        public virtual void F()

        {

           Console.WriteLine ("A.F");

        }

    }

    class B:A

    {

        public override void F()

        {

           Console.WriteLine ("B.F");

        }

    }

    class C:B

    {

        public new   void F()

        {

           Console.WriteLine ("C.F");

        }

    }

    class Test

    {

        static void Main()

        {

           C c = new C ();

           A a = c;

           a.F();

        }

    }

    输出: B.F

    ->基类的成员会搜索继承链,找到使用了new修饰符的那个成员之前的成员,然后调用该成员。

    多态(polymorphism):

    多态是指两个或多个属于不同类的对象,对同一个消息做出不同响应的能力。

    ->virtual 和 override 关键字 : 多态给子类提供了一种方式,可以自定义如何实现基类所定义的方法;

    看下面代码:

    using System ;

    class Employee

    {

        protected string _name;

        public Employee () {}

        public Employee (string name)

        {

           _name = name ;

        }

        public virtual void StartWork()

        {

           Console.WriteLine (_name+"开如工作");

        }

    }

    class Manager:Employee

    {

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

        public override void StartWork()

        {

           base .StartWork (); //注意base的使用

           Console .WriteLine ("下达任务");

        }

    }

    class Seller:Employee

    {

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

        public override void StartWork()

        {

           base .StartWork ();

           Console .WriteLine ("销售产品");

        }

    }

    class Test

    {

        static void Main()

        {

           Employee [] emp = new Employee[2] ;

           emp [0]=new Manager ("张三");

           emp [1]=new Seller ("李四");

           foreach (Employee e in emp )

           {

               e.StartWork ();

           }

        }

    }

  • 相关阅读:
    "未能加载文件或程序集“XXX”或它的某一个依赖项。系统找不到指定的文件"的解决方案
    035——VUE中表单控件处理之使用vue控制select操作文字栏目列表
    034——VUE中表单控件处理之使用vue控制radio表单的实例操作
    033——VUE中安装使用vue-devtools调试工具用于监控数据变化
    015PHP基础知识——流程控制(三)
    014PHP基础知识——流程控制(二)
    032——VUE中表单控件处理之复选框的处理
    031——VUE中表单控件处理之使用vue控制input和textarea表单项
    030——VUE中鼠标语义修饰符
    029——VUE中键盘语义修饰符
  • 原文地址:https://www.cnblogs.com/0515offer/p/4191906.html
Copyright © 2011-2022 走看看