加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

覆盖C#中的关键字

发布时间:2020-12-16 00:25:13 所属栏目:百科 来源:网络整理
导读:我有以下课程: namespace ConsoleApplication8{ public abstract class Employee { public virtual void Show() { Console.WriteLine("from base."); } } public class Manager:Employee { public void Show() { Console.WriteLine("from child."); } } cla
我有以下课程:

namespace ConsoleApplication8
{
    public abstract class Employee
    {
        public virtual void Show()
        {
            Console.WriteLine("from base.");
        }
    }

    public class Manager:Employee 
    {
        public void Show()
        {

            Console.WriteLine("from child.");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var man=new Manager();
            man.Show();
            Console.ReadKey();
        }
    }
}

这里我没有在派生类Manager中使用方法Show()的任何override关键字,但代码运行正常.那么override关键字的实际用途是什么?

解决方法

你没有改写原始方法,你是 hiding.这也是可能的,但也许不是你想要的或者你期望的,因为你输了 polymorphism.我举一个例子:

static void Main(string[] args)
{
    var man=new Manager();
    man.Show();
    Console.ReadKey();
}

这是你编码并输出“From child”.以下,当使用“覆盖”时也会输出“From child”.在你的情况下,它不会.

static void Main(string[] args)
{
    var man=new Manager();
    (man as Employee).Show();
    Console.ReadKey();
}

这里提出了一个类似的问题:virtual keyword in c#.虽然它没有解决override关键字,但问题类大致相同.

多态性有用时的真实例子.我必须根据他们的角色编写一个应用程序来计算公司所有员工的奖金.正如您所做的那样,我有一个员工类,其中包含一个公共虚拟双FFTlateBonus();方法和由此衍生的几个分类.

多亏了多态性,我所要做的就是迭代List< Employee>所有员工,无论他们的角色如何,并调用CalculateBonus方法,因为多态性确保始终调用覆盖.

如果没有覆盖,奖金将全部为0,因为这是Employee类中CalculateBonus的默认结果.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读