C# 关键字之new(重写),override(覆盖)

override :是指“覆盖”,是指子类覆盖了父类中被virtual的方法。

new : 是指“隐藏”,是指子类隐藏了父类的方法()。new除了可以创建对象,以及作为泛型约束之外,还可以作为方法的修饰符,这里讨论的是作为方法的修饰符时与override的异同。

   public class Base
    {
        public virtual void Method1()
        {
            Console.WriteLine("Base's virtual function Method1");
        }

        public virtual void Method2()
        {
            Console.WriteLine("Base's virtual fucntion Method2");
        }
    }
    public class Derived : Base
    {
        public override void Method1()
        {
            Console.WriteLine("Derived's override function Method1");
        }

        public new void Method2()
        {
            Console.WriteLine("Derived's new function Method2");
        }
    }

Derived继承了Base,在Derived中,Method1重写了基类的Method1,Method2隐藏了基类的Method2。

单纯地var baseClass = new Base();或var derived = new Derived();调用的是各自的方法,这点不用讨论了。

当Base baseClass= new Derived();时,这里发生了一次向上转型,baseClass从Derived转型为其父类Base类型。实例baseClass.Method1调用的将是Derived.Method1的方法,因为在实例化的时候Method1已经被重写(override)过了。而baseClass.Method2调用的将是Base.Method2,因为baseClass.Method2没有被影响到,依然是Base.Method2。

Base baseClass = new Derived();
baseClass.Method1();
baseClass.Method2();

输出结果:

Derived's override function Method1
Base's virtual fucntion Method2

总结:override会覆盖基类的方法,从而实现面向对象的多态特性。new不会影响基类,与多态无关。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值