C#基础virtual,override和new的区别1

1 C#基础virtual,override和new的区别1_m0_55413404的博客-CSDN博客

2 C#基础virtual,override和new的区别2_m0_55413404的博客-CSDN博客

3 C#基础virtual,override和new的区别3_m0_55413404的博客-CSDN博客

4 C#基础virtual,override和new的区别4_m0_55413404的博客-CSDN博客

5 C#基础virtual,override和new的区别5(试题训练)_m0_55413404的博客-CSDN博客

class Program
    {
        static void Main(string[] args)
        {
            A2 ab = new B2();
            ab.Method();

            A2 ac = new C2();
            ac.Method();

            A2 ad = new A2();
            ad.Method();

            B2 ae = new B2();
            ae.Method();

    }

//创建基类以及派生类

public class A2
    {
        public virtual void Method()
        {
            Console.WriteLine("This Method in Class A!");
        }
    }

    public class B2 : A2
    {
        public new void Method()
        {
            Console.WriteLine("This Method in Class B!");
        }
    }


    public class C2 : A2
    {
        public override void Method()
        {
            Console.WriteLine("This Method in Class C!");
        }
    }

运行结果:

分析:父类virtual.,派生类override会覆盖掉基类的方法,直接走派生类。

           父类virtual,而new则不会覆盖基类方法。所以还是走基类的方法。

注:声明为父类,实例化为子类的对象,执行该对象(父类)的方法时如果父类中存在Virtual,会先去实例化的子类中寻找override的该方法,如果存在,则覆盖父类执行子类的方法。而new是子类中完全不同于父类的方法,方法名一样,但其实是两个方法。所以对于有new没有override的方法,会执行父类的方法。

延伸:实例化一个对象的过程,是去访问该对象构造函数的过程。如果该对象有父类,则实例化时,会向上探测,执行最外层的父类的构造函数,依次向下走该子类,子类的子类。。。的构造函数。

A2 ad = new A2();B2 ae = new B2();方法不在构造函数里面,与父类无关,所以A2执行结果为A2,B2执行结果为B2,具体构造函数里面的方法执行区别可以看第三篇。

下一篇 基类派生类进阶

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值