在.NET中, Abstract (抽象类)和 Interface (接口)有以下区别:
定义和语法
- 抽象类:用 abstract 关键字修饰,包含抽象成员(抽象方法、属性等)和非抽象成员。
- 接口:用 interface 关键字定义,只能包含方法、属性、事件等成员的签名,不能有实现。
继承和实现
- 抽象类:只能单继承,即一个类只能继承一个抽象类。
- 接口:可以多实现,一个类可以实现多个接口。
成员实现
- 抽象类:抽象成员在抽象类中不提供实现,由子类实现;非抽象成员有具体实现。
- 接口:所有成员都没有实现,由实现接口的类来实现。
访问修饰符
- 抽象类:成员可以有各种访问修饰符,如 public 、 private 、 protected 等。
- 接口:成员默认是 public ,不能显式指定其他访问修饰符。
应用场景
- 抽象类:用于表示一组相关类的共同特征和行为,提供部分实现,子类可以在此基础上进行扩展和定制。
- 接口:用于定义一组规范或契约,不同类型的类可以通过实现接口来表明它们支持特定的行为。
以下是一个简单的代码案例:
csharp
// 抽象类
abstract class Animal
{
public abstract void MakeSound();
public void Eat()
{
Console.WriteLine("动物在吃东西。");
}
}