C#学习笔记系列
第一章 【C#学习笔记】【StackTrace】
第二章 【C#学习笔记】【Attribute】
第三章 【C#学习笔记】【Interface】
第四章 【C#学习笔记】【GUID】
第五章 【C#学习笔记】【Virtual】
第六章 【C#学习笔记】【Abstract】
前言
关于C#中抽象类(abstract)详解。
一、abstract介绍
- abstract修饰符可用于类、方法、属性、索引和事件。
- abstract修饰符用于简单地概括一个不完整的内容(摘要)。常用于基类,由派生类来继承实现基类的抽象属性和方法。
- 抽象类是对具有相同行为和特征的抽象,抽象类中的成员不会指定具体细节,一般再其派生类中去实现具体内容。
- 在普通类前加上abstract修饰符即可标注为抽象类。 如果一个普通类中对其成员使用了abstract修饰符,则该类必须修饰为抽象类。
- 无法使用sealed修饰符来修改抽象类,因为两个修饰符的含义相反。sealed修饰符阻止类被继承,而abstract修饰符要求类被继承。
- 继承抽象方法的派生类,必须实现override抽象类中的所有成员,用override重写来实现。
- 抽象类无法被实例化,但可以让派生类实例化。
- 抽象方法必须声明在抽象类中,声明抽象方法时,不能使用virtual、static、private修饰符。
- 抽象方法声明不提供实际的声明,因此没有方法主体,和接口类似,和虚方法不一样。
二、抽象类的使用
2.1.声明形式
abstract class Person
{
public abstract void IDentity();
}
2.2.调用方法
abstract class Person
{
public abstract void IDentity();
}
class Boy:Person
{
public override void IDentity()
{
Console.WriteLine("我是一个人");
}
}
三、抽象类的应用场景
抽象类用简单的描述就是:我是老子(抽象类),你要是跟了(继承)老子,你就必须得会干什么(实际实现)
举个场景就是:老子会大人,那你也必须会大人,但你是轻轻地打,还是狠狠的打,你自己决定,但你必须得会打人。
如果一个类设计的目的是用来被其他类继承的,它代表一类对象的所具有的公共属性或方法,那么这个类就应该设置为抽象类。
四、对比Interface、Virtual、Abstract
这三者很容易混淆,因为都是与继承有关系,并且涉及到override的使用
virtual方法有具体的实现,interface接口内的方法和abstract抽象方法都没有具体的实现;
virtual方法在派生类中可以重写覆盖也可以不重写,interface接口内的方法和abstract抽象方法则必须要被显式重写;
interface接口可以多重继承,virtual所在的类和abstract抽象类都是属于基类不可以多重继承;
interface只是一种行为规范,而abstract抽象类是一个不完全的类,是对对象的抽象
总结
不积硅步,何以至千里