C#中,如何选择使用虚方法还是抽象方法?

来源:百度知道 编辑:UC知道 时间:2024/06/15 12:47:18
如题 ^_^ 谢谢大家

个人观点:

在由基类派生出的子类中,必须有基类的方法(行为),而且有不同的方法实现。
这种情况下应用抽象方法。

在由基类派生出的子类中,存在于基类相同的方法,但可能有不同的方法实现。
这种情况用虚方法。

---
语言表述的能力太差,举个例子:

(基类)父亲会驾驶汽车(行为),

当所有的子类都具有驾驶汽车的行为时,且子类驾驶的汽车类型不同。

这时应用抽象类。

当父类驾驶的汽车类型为小汽车,子类1驾驶的汽车类型为卡车,子类2驾驶的汽车类型为小汽车时。

应用抽象类。

----

好像写的很罗嗦,不知道你能不能明白呢...

虚方法,在父类里面是有代码的,那么如果没子类,父类依然可以干活,如果子类override了这个虚方法,子类的方法将替代这个方法。
抽象方法,在父类里面是个没实现的东西,更加像个说明,子类必须实现这个方法的内容,不然子类也要声明为抽象类。
简单的说,如果你感觉父类的这个方法可以有代码,那么把他声明为虚的,如果你感觉,父类是个超级抽象的概念,方法没有实现代码,需要子类自己实现,那么你用抽象方法。

方法是一个类的行为,在你不确定这个行为具体要干些什么的时候,你只能把它定义为一个抽象的规范来告诉子类你想通过这个行为来导致一个怎样的结果,这样,不同的子类会根据它们自身的状况为这个行为做具体的操作,这就是使用抽象方法。
在你确定某一个行为在默认情况下具体可以干些什么的时候,可以使用虚方法,这样既可以为子类提供更多的服务,又能在不同子类需要根据其自身状况对此方法重写的时候提供一个行为规范。

明白了吗?