为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

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

正在回答

5 回答

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

Dog dog=new Dog();

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

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

0 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

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

设计成多态,就要用override。

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

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

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

1 回复 有任何疑惑可以回复我~

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

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

2 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~
#1

Graphemer 提问者

我说的new指的是类里面同名隐藏父类方法的那个new 不是= new XX()的那个new
2017-05-17 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C#面向对象编程
  • 参与学习       68858    人
  • 解答问题       153    个

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

进入课程

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信