zoukankan      html  css  js  c++  java
  • C#基础之虚方法

    虚方法(virtual)

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

    virtual主要是用于实现多态,父类中定义虚方法,子类继承父类,并重写虚方法以实现对同一个方法不同的相应。

    下面来举个例子说明

    首先我定义了一个父类:Employee

     class Employee
        {
            private string _name;
            public Employee(string name)
            {
                this._name = name;
            }
            public virtual void startWork()
            {
                Console.Write(this._name+"开始工作");
            }
        }

    注意:父类中的方法startWork在public之后加了一个关键字 virtual,该关键字表示startWork为一个虚方法

    接着我们来定义第一个派生类:Manager,该类继承于Employee

    class Manager : Employee
        {
            //构造函数继承于基类构造函数
            public Manager(string name) : base(name) { }
            //重写父类方法
            public override void startWork()
            {
                base.startWork();//调用基类方法
                Console.WriteLine("发布任务");
            }
        }
    

    注意:派生类Manager的构造函数继承了父类的构造函数,同时startWork也在Manager类中被重写,使用override关键字。一般而言,virtual与override是一对的哥们。

    同样的我们可以定义第二个子类,第三个子类,均派生于父类Employee

     //第二个子类Seller
        class Seller : Employee
        {
            public Seller(string name) : base(name) { }
            public override void startWork()
            {
                base.startWork();
                Console.WriteLine("销售产品");
            }
        }
        //第三个子类Accountant
        class Accountant : Employee
        {
            public Accountant(string name) : base(name) { }
            public override void startWork()
            {
                base.startWork();
                Console.WriteLine("管理财务");
            }
        }

    接着我们在Main函数来使用这些类

     static void Main(string[] args)
            {
                Employee[] employees = new Employee[3];//定义了三个Employee数组
                employees[0] = new Manager("张三");//数据类型的隐式转换
                employees[1] = new Seller("李四");
                employees[2] = new Accountant("王五");
                Console.WriteLine("现在开始工作");
                foreach (Employee emp in employees)
                {
                    emp.startWork();
                }
                Console.ReadKey();
            }

    该函数中,我们声明了一个Employee类的数组,并实现了类的隐式转换。注意,只有子类能够隐式转换为父类,而父类不能隐式转换为子类。就好比,人是一个父类,中国人是子类,中国人可以默认为人,但是人不能默认为中国人,因为人还可能是美国人,韩国人,英国人等。类似的例子还有C#中的可空类型的隐式转换等。

    这样大家就可以很容易的看到,虚方法是我们的程序扩展性很强,如果你想再添加一个秘书类,只要再写个类然后派生于父类,再在主程序中修改一点就行啦。而不需要去该其他的类和父类。

  • 相关阅读:
    poj1703
    poj 2385
    poj 3169 差分约束
    poj3723 最大权森林
    POJ3255 次短路
    图论算法----最小生成树
    给linux操作系统安装中文环境
    Windows下使用python
    pku3668 Game of Lines
    pku3670 Eating Together
  • 原文地址:https://www.cnblogs.com/luodao1991/p/3052376.html
Copyright © 2011-2022 走看看