默认接口方法:钻石问题与混合继承
深入 C# 8 的默认接口方法如何解决多继承冲突,并探讨其与 trait 系统的异同,构建一个带默认行为的插件系统。 · 难度:入门 · +10XP
默认接口方法:钻石问题与混合继承
默认接口方法允许在接口中提供实现体,打破了传统接口的无状态约定。本教程将构造一个经典的钻石继承案例:两个接口 IReader 和 IWriter 都定义了默认的 Process 方法,而 IReadWriter 同时继承二者并必须解决冲突。并展示如何利用接口中的静态字段实现有限状态共享,从而构建类似 Scala trait 的混合功能。
interface IReader
{
void Process() => Console.WriteLine("Reader processing");
}
interface IWriter
{
void Process() => Console.WriteLine("Writer processing");
}
interface IReadWriter : IReader, IWriter
{
void IReader.Process() => Console.WriteLine("ReadWriter as Reader");
void IWriter.Process() => Console.WriteLine("ReadWriter as Writer");
// 新的默认方法
void Process() => ((IReader)this).Process();
}