C#既然有virual和override,那还要new有什么用呢?

来源:2-3 虚方法和多态

Graphemer

2017-05-17 09:28

按照视频老师所说的依赖倒置原则。程序涉及要依赖于抽象类(父类),而不依赖于具体类(子类)。这样做的一个好处就是程序具有很大的可扩展性。

那直接通过父类建立,然后需要的话用virtual和override不就可以了?那通过子类建立来隐藏父类方法的new岂不是意义不大?有什么不可取代的原因吗?

写回答 关注

5回答

  • Dawn_Spacetime
    2018-08-15 09:56:34

    你可以去看一下老师第二课的代码,你会发现老师实例化的时候是

    Dog dog=new Dog();

    这个时候就是new,它的引用是派生类的,你引用了之后本来应该使用基类的那个方法,可是在运行的时候派生类用自己的new过的方法把那个替换了;

    但是如果是使用虚方法,那么实例化的时候引用就是基类;只不过在运行的时候如果发现实例化的new后面的类型里面有一个override一个virtual的方法,就会去调用那个方法,而不是基类的。不过说到底作为一个初学者我也不知道有什么不可取代的地方~

  • 俊仔share
    2018-07-25 16:04:15

    根据依赖倒置原则,在主程序中调用方法一般用基类来调用,如Pet.Speak(),而不用Dog.Speak,当在基类的方法声明为Virtual虚方法后,调用时会检验基类所指向的派生类的方法是否被override重写,如果被重写则调用的是重写后的方法;使用new隐藏方法时,时在派生类中的方法用new声明。

  • 慕桂英1285553
    2018-06-20 18:36:57

    这个是设计原则,要尽量依赖基类,这就是多态。

    设计成多态,就要用override。

    单单使用继承重写方法,就用new。

    就结果而言应该一样的。但是实例化的类不一样,override是实例了基类,new实例了子类。

    使用override可以降低程序耦合,更加推荐啊。

  • 慕神5368544
    2017-05-26 16:41:42

    new 用来隐藏基类中的方法,只有通过派生类本身类的引用才能调用出。

    override 用来重写基类中的方法,通过基类调用出的是派生类重写后的方法。可以实现多态。

  • MyAnswer1
    2017-05-17 14:13:52

    new用来实例化一个类,作用对像是类.Override是重写,作用对像是变量或方法,在继承一个父类的情况下才有意义,将覆盖父类中的变量或方法.

    Graphe...

    我说的new指的是类里面同名隐藏父类方法的那个new 不是= new XX()的那个new

    2017-05-17 14:16:36

    共 1 条回复 >

C#面向对象编程

本系列教程主要是,带你学习C#面向对象编程的编程思想、编程技巧

68612 学习 · 153 问题

查看课程

相似问题