浅谈c#中new和override的用法区别

148 篇文章 1 订阅

http://hi.baidu.com/xiaoxiao_luo/item/a2b86f0ca468e796a3df43fb

首先,我引用《c#程序设计实用教程》中的一句话:"关键字new和override的区别:new修饰的方法表示显式隐藏基类继承的同名方法,不能够用基类的引用访问派生类的new方法;override表示重写基类的虚方法,可以用基类的引用指向派生类的重写方法。"

   要理解这句话,你必须知道句子中的几个关键字:
  
1.显式隐藏
   2.用基类的引用访问派生类的new方法
   3.重写
   下面我来一一解释清楚,明白后,new和override的区别也就清楚了。
   看两张图片,也许大家就会明白很多。

        .....................................................................................................


大家比较一下,应该明白了第一个和第三个关键字的含义了吧
显示隐藏:new后,子类的method1()会同时和父类的method1()同时存在,但当使用子类的时候调用子类的method1()方法,而不会调用父类的method1(),后面我在详细解释一下
什么时候调用父类的method1().
重写:override后,子类继承父类的method1(),并完全的改写此方法。

下面在解释一下“.用基类的引用访问派生类的new方法”,
public class animal
    {
        public virtual void sleep()
        {
            Console.WriteLine("animal all need sleep");
        }
    }
    public class fish : animal
    {
        public override void sleep()
        {
            Console.WriteLine("fish sleeping with eye_open");
        }
    }
    public class dog : animal
    {
        public override void sleep()
        {
            Console.WriteLine("dog sleeping with eye_closed");
        }
    }
那么现在我们可以在mian函数中执行下面的代码
animal fj1=new animal();
animal fj2=new fish();
animal fj3=new dog();
fj1.sleep();
fj2.sleep();
fj3.sleep();
输出:
animal all need sleep
fish sleeping with eye_open
dog sleeping with eye_closed

如果你用new取代override(这时候父类中就去掉关键字virtual),还是上面的代码:
输出结果:
animal all need sleep
animal all need sleep
animal all need sleep
     主要是因为“animal fj1=new animal();”中用animal去实例化它的子类对象,在调用方法的时候它会调用父类的method1()方法,而不是调用子类的method1()方法。
这也解决了前面的什么时候调用父类的method1()方法的问题。
有什么不对的地方,恳求指点。

 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值