Z
ZHANK
编程在线教程C# 教程接口与抽象类
面向对象

接口与抽象类

interface 定义、显式实现、默认接口方法(C# 8)、abstract

接口与抽象类

接口定义"能做什么",抽象类提供"部分怎么做"。C# 8+ 的接口可以有默认实现。

学完本章你将: 掌握 interface、显式实现、默认接口方法、abstract 抽象类。


Interface 定义与实现

csharp
public interface ILogger
{
    void Log(string message);
    void LogError(string message) => Log($"[ERROR] {message}"); // C# 8+ 默认实现
}

public interface IFormatter
{
    string Format(string message);
}

// 实现多个接口
public class ConsoleLogger : ILogger, IFormatter
{
    public void Log(string message) => Console.WriteLine(message);
    public string Format(string message) => $"[{DateTime.Now}] {message}";
}

显式接口实现

csharp
public class MultiLogger : ILogger, IFormatter
{
    // 显式实现——避免命名冲突
    void ILogger.Log(string msg) => Console.WriteLine($"LOG: {msg}");
    string IFormatter.Format(string msg) => $"[{msg}]";

    // 只能通过接口调用的方法
}
// var logger = new MultiLogger();
// logger.Log("test");   // ❌ 编译错误
((ILogger)logger).Log("test");  // ✅

抽象类

csharp
public abstract class Repository<T>
{
    // 抽象方法——子类必须实现
    public abstract Task<T?> GetByIdAsync(int id);

    // 虚方法——子类可选重写
    public virtual async Task<T> GetOrThrowAsync(int id)
    {
        return await GetByIdAsync(id)
            ?? throw new NotFoundException($"ID {id} 不存在");
    }
}
InterfaceAbstract Class
继承可实现多个只能继承一个
成员方法/属性/事件/索引器字段/构造/完整实现
默认实现C# 8+ 支持一直支持