C# 有一个有用的显式接口特性,可以让您创建实现接口的方法,同时避免潜在的名称冲突。
public abstract class BaseClass : IDisposable {
public int Value;
void IDisposable.Dispose() => Value = 1;
}
你甚至可以在子类中重写这些方法,只要子类也明确列出它实现了接口。
public class SubClass : BaseClass, IDisposable {
void IDisposable.Dispose() => Value = 2;
}
static void Main() {
BaseClass obj = new SubClass();
((IDisposable)obj).Dispose();
Console.WriteLine(obj.Value); // 2
}
在子类中,您通常可以调用base.Whatever
以访问方法的基类版本。但是对于显式接口实现,这种语法是无效的。此外,没有办法将您的基础转换为接口以调用该方法。
如何访问基类的显式接口实现中的逻辑?