Bootstrap

C# 零基础入门篇(7.抽象类)

## 1. 抽象类的概念

抽象类是一种特殊的类,它不能被实例化,只能作为其他类的基类。抽象类的主要目的是为派生类提供一个统一的接口和部分实现,同时允许派生类根据自身需求实现具体的功能。

抽象类可以包含以下成员:

- **抽象方法**:没有具体实现的方法,派生类必须实现这些方法。
- **抽象属性**:没有具体实现的属性,派生类必须实现这些属性。
- **普通方法和属性**:抽象类也可以包含具体的实现,这些成员可以被派生类继承。
- **构造函数和析构函数**:抽象类可以有构造函数和析构函数,但它们不会被直接调用。

## 2. 抽象类的声明

抽象类使用`abstract`关键字声明。抽象类中的抽象成员也必须使用`abstract`关键字修饰。

示例:

```
public abstract class Animal
{
    // 抽象方法
    public abstract void MakeSound();

    // 普通方法
    public void Sleep()
    {
        Console.WriteLine("This animal is sleeping.");
    }

    // 抽象属性
    public abstract string Name { get; set; }
}
```

## 3. 抽象方法和抽象属性

### 3.1 抽象方法

抽象方法是没有具体实现的方法,必须在派生类中被实现。抽象方法的声明格式如下:

```
public abstract void MethodName();
```

### 3.2 抽象属性

抽象属性是没有具体实现的属性,必须在派生类中被实现。抽象属性的声明格式如下:

```
public abstract string PropertyName { get; set; }
```

## 4. 派生类的实现

派生类必须实现抽象类中所有的抽象方法和抽象属性。如果派生类没有实现所有抽象成员,派生类也必须被声明为抽象类。

示例:

```
public class Dog : Animal
{
    // 实现抽象方法
    public override void MakeSound()
    {
        Console.WriteLine("Woof!");
    }

    // 实现抽象属性
    public override string Name { get; set; }
}
```

## 5. 抽象类的特点

### 5.1 不能实例化

抽象类不能被直接实例化,只能作为其他类的基类。

```
Animal animal = new Animal(); // 错误:不能实例化抽象类
```

### 5.2 可以包含具体实现

抽象类可以包含具体的方法和属性实现,这些成员可以被派生类继承和使用。

### 5.3 抽象方法和属性必须被实现

派生类必须实现抽象类中所有的抽象方法和抽象属性,否则派生类也必须被声明为抽象类。

### 5.4 可以包含构造函数和析构函数

抽象类可以有构造函数和析构函数,但它们不会被直接调用。构造函数通常用于初始化抽象类中的字段。

##  抽象类的使用场景

抽象类通常用于以下场景:

- **定义通用接口**:为派生类提供统一的接口和部分实现。
- **隐藏实现细节**:通过抽象类隐藏具体的实现细节,只暴露必要的接口。
- **提供默认行为**:通过抽象类提供默认行为,派生类可以根据需要重写这些行为。

;