在C#中,abstract
关键字用于创建抽象类和抽象成员。抽象类是一种特殊的类,它不能被实例化,只能作为基类被其他类继承。抽象成员是在类中声明但不提供实现的方法、属性、索引器或事件。在派生类中,必须对基类中的所有抽象成员进行实现(覆盖)。
抽象类
- 定义:抽象类通过在类定义前加上
abstract
关键字来创建。抽象类通常用作基类,在这个类中可以包含抽象成员和非抽象成员。 - 目的:抽象类的主要目的是提供一个通用模板,派生类可以根据这个模板实现具体的功能。
- 实例化:不能直接创建抽象类的实例。尝试这样做会导致编译时错误。
抽象成员
- 定义:抽象成员是在抽象类内部声明的,但没有实现的成员。抽象成员也使用
abstract
关键字进行声明。 - 实现:在派生类中,必须重写并实现所有继承的抽象成员,除非派生类本身也被声明为抽象类。
- 类型:可以将方法、属性、索引器和事件声明为抽象。
个人理解
由此,我的个人理解是abstract的主要作用是除了在编程时可以防止手贱实例化以外,由于它强制继承它的派生类需要实现这个这个抽象类或者成员的方法和属性,所以还具有规范化接口的功能。
举个栗子
查老师给的栗子,剥好的香香的,很容易理解 : )
想象我们在开发一个动物园管理系统,需要表示不同类型的动物以及它们的叫声。在这个系统中,每种动物的叫声都是独特的,但我们不能直接实例化一个“动物”因为“动物”是一个非常抽象的概念。在这种情况下,我们可以使用abstract
关键字来创建一个抽象的Animal
类和一个抽象方法MakeSound
。每个具体的动物类(如Dog
和Cat
)都继承自Animal
类,并提供MakeSound
方法的具体实现。
抽象类和抽象方法
|
|
使用示例
|
|
在这个例子中:
Animal
是一个抽象类,代表了动物园里所有动物的共同特征。它定义了一个抽象方法MakeSound
,但没有提供具体的实现,因为每种动物的叫声都是不同的。Dog
和Cat
是Animal
的具体实现,它们分别提供了MakeSound
方法的具体实现。这意味着每种动物都有自己特有的叫声。- 我们不能直接创建
Animal
类的实例,因为它是抽象的。但我们可以创建Dog
和Cat
的实例,并通过Animal
类型的引用来调用它们的MakeSound
方法,这体现了多态性。