【发布时间】:2011-02-03 23:25:59
【问题描述】:
这是 abstract classes 上的 MSDN 文章,但我真的不明白...
什么时候应该真正使用抽象类?使用抽象类有什么好处?
【问题讨论】:
-
MSDN 关于抽象类的文章真是个笑话,很可悲。
标签: c# .net abstract-class
这是 abstract classes 上的 MSDN 文章,但我真的不明白...
什么时候应该真正使用抽象类?使用抽象类有什么好处?
【问题讨论】:
标签: c# .net abstract-class
基本上,您应该使用抽象类,当您的层次结构中的某些实体在逻辑上具有方法时,它不知道如何实现,但它的后代可以。网络上有数十亿个“现实生活”的例子,真的)
【讨论】:
当您在类层次结构中为永远不会用于直接实例化对象的类定义行为时,请使用抽象类。
所以,暂时把自己想象成上帝吧。您的 CBabyBoy 和 CBanyGirl 类不会是抽象的 - 因为它们是确实被创建的实体对象。另一方面,您的 CPerson 和 CAnimal 类将是抽象的 - 从类型层次结构的角度来看,它们很有用,但您永远不会运行 CAnimal dingbat = new Animal();
【讨论】:
当您需要一个类来实现继承和多态性时,抽象类很有用,但是实例化类本身没有意义,只实例化它的子类。当您想为一组共享一些公共实现代码的子类定义模板时,通常会使用它们,但您又想保证不能创建超类的对象。
例如,假设您需要创建 Dog、Cat、Hamster 和 Fish 对象。它们具有相似的属性,例如颜色、大小、腿数以及行为,因此您可以创建一个 Animal 超类。然而,动物是什么颜色的? Animal 对象有几条腿?在这种情况下,实例化 Animal 类型的对象没有多大意义,而只实例化它的子类。
抽象类还具有多态性的额外好处——允许您使用(抽象)超类的类型作为方法参数或返回类型。例如,如果您有一个带有 train() 方法的 PetOwner 类,您可以将其定义为接收 Animal 类型的对象,例如train(Animal a) 而不是为 Animal 的每个子类型创建一个方法。
【讨论】:
您将它们用于永远不会创建的类(因此实际上不存在),但出于多态性的原因您希望从它们继承。
【讨论】:
通过使用抽象类,我们可以使类更通用。
例如:如果A类是一个抽象类,并且有B类,C类和D类扩展抽象类A,那么这些子类将继承一个已经在抽象类A中声明的方法,从而使该方法更通用。
【讨论】:
【讨论】: