C#中重写、重载、隐藏的关系

       今天看完C#视频进行总结的时候,发现了三个相同又不同的名词:重写、重载和隐藏。对于他们三个理解又模糊又有点明白,现在整理一下思路。

一、方法重载和方法重写


方法名参数列表返回值类型
重载必须相同必须不相同可以不相同
重写相同相同
相同

           方法重载:类中有相同定义的方法的名称,但是这些方法必须有不同的调用参数(参数个数不同、参数类型不同),这样可以根据传递参数的不同来调用同一个类中的不同方法。在构造函数中使用的较多。

       例子:

               public Vector(double x,double y,double z)
        {
            this.z = x;
            this.y = y;
            this.z = z;
        }
        public Vector(Vector rhs)
        {
            x = rhs.x;
            y = rhs.y;
            z = rhs.z;
        }

        方法重写:方法重写用在虚方法和抽象方法中,方法重写的目的是现实多态,当在基类中有一个方法,而想在派生类中覆盖它时,应该把基类中的方子法声明为virtual的,他的含义是让派生类具有同样名字和参数表示的方法被调用,而不是调用基类中的子方法。而在派生类中声明次方法的时候必须用override关键字声明。它的三个要求必须都相同。

         例子:有一个People父类,他有一个GuoJI()方法,默认情况下他显示是一个中国人,而有一个American子类继承People父类,在继承GuoJi()这个方法就有点不合逻辑了,所以他就需要重写这个方法:
        class People
    {
        public virtual void GuoJi()
        {
            Console.WriteLine("大家好,我来自中国!");
        }
    }
    class American:People
    {
        public override void GuoJi()
        {
            Console.WriteLine("大家好,我来自美国!");
        }
    }

二、方法重写和隐藏

       上面方法重写中,当不把基类中的方法声明为Virtual时,可以用另一种方法来实现上面例子中的功能,那就是在派生类中声明方法时使用new关键字,从而有效的隐藏基类中的同一名字的方法。
    这种方式不叫重写,子类跟父类中的同名方法因为new这一关键字使他们没有任何关系,所以子类可以调用自己类中的这一方法而不会被基类中的同名方法所干扰。
 (需要注意的是,new关键字不可以用在抽象类中,因为抽象类中的抽象方法必须重写)
 还是上面的那个例子,我们来看一下用new的实现方法:
          class People
    {
        public void GuoJi()
        {
            Console.WriteLine("大家好,我来自中国!");
        }
    }
    class American:People
    {
        public new void GuoJi()      用new关键字来隐藏基类中同名的方法
        {
            Console.WriteLine("大家好,我来自美国!");
 

     People p1=new People();
     p1.GuoJi();
 
     American p2=new American()
    p2.GuoJi()                  
    Console.ReadLine();
  
  运行后的显示结果是:
     大家好,我来自中国!
     大家好,我来自美国!
三、总结:

       方法重载就是相同的方法名可以进行不同的操作,方法重写和隐藏可以根据自己的需求获取不同于基类中相同方法名到的方法。

       知识总是在对比和联系中加深理解,现在理解的还不到位,后面继续!




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
对于计算机专业的学生而言,参加各类比赛能够带来多方面的益处,具体包括但不限于以下几点: 技能提升: 参与比赛促使学生深入学习和掌握计算机领域的专业知识与技能,如编程语言、算法设计、软件工程、网络安全等。 比赛通常涉及实际问题的解决,有助于将理论知识应用于实践,增强问题解决能力。 实践经验: 大多数比赛都要求参赛者设计并实现解决方案,这提供了宝贵的动手操作机会,有助于积累项目经验。 实践经验对于计算机专业的学生尤为重要,因为雇主往往更青睐有实际项目背景的候选人。 团队合作: 许多比赛鼓励团队协作,这有助于培养学生的团队精神、沟通技巧和领导能力。 团队合作还能促进学生之间的知识共享和思维碰撞,有助于形成更全面的解决方案。 职业发展: 获奖经历可以显著增强简历的吸引力,为求职或继续深造提供有力支持。 某些比赛可能直接与企业合作,提供实习、工作机会或奖学金,为学生的职业生涯打开更多门路。 网络拓展: 比赛是结识同行业人才的好机会,可以帮助学生建立行业联系,这对于未来的职业发展非常重要。 奖金与荣誉: 许多比赛提供奖金或奖品,这不仅能给予学生经济上的奖励,还能增强其成就感和自信心。 荣誉证书或奖状可以证明学生的成就,对个人品牌建设有积极作用。 创新与研究: 参加比赛可以激发学生的创新思维,推动科研项目的开展,有时甚至能促成学术论文的发表。 个人成长: 在准备和参加比赛的过程,学生将面临压力与挑战,这有助于培养良好的心理素质和抗压能力。 自我挑战和克服困难的经历对个人成长有着深远的影响。 综上所述,参加计算机领域的比赛对于学生来说是一个全面发展的平台,不仅可以提升专业技能,还能增强团队协作、沟通、解决问题的能力,并为未来的职业生涯奠定坚实的基础。
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值