C# 中abstract class和interface有什么区别?举例
时间: 2024-09-08 20:04:04 浏览: 77
在C#中,`abstract class`(抽象类)和`interface`(接口)都用于实现多态性,但是它们之间存在一些本质的区别:
1. 抽象类:
- 可以包含方法的实现(抽象方法或者非抽象方法)。
- 可以包含构造函数。
- 可以定义字段、属性、事件以及索引器。
- 一个类只能继承一个抽象类。
- 抽象类的主要目的是提供一个共同的基类,让不同的子类来继承并实现其抽象方法。
例子:
```csharp
public abstract class Animal
{
public abstract void MakeSound();
public void Eat()
{
Console.WriteLine("Animal is eating.");
}
}
public class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine("Bark!");
}
}
```
2. 接口:
- 只能包含抽象成员(方法、属性、事件、索引器),不能包含实现代码。
- 不能包含构造函数。
- 一个类可以实现多个接口。
- 接口的主要目的是定义一个契约,强制实现它的类必须提供接口中定义的所有成员的实现。
例子:
```csharp
public interface IAnimal
{
void MakeSound();
}
public class Cat : IAnimal
{
public void MakeSound()
{
Console.WriteLine("Meow!");
}
}
```
阅读全文