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
для доступа к версиям методов базового класса. Но с явными реализациями интерфейса этот синтаксис недействителен. Кроме того, нет возможности привести вашу базу к интерфейсу, чтобы вызвать метод.
Как мне получить доступ к логике в явной реализации интерфейса моего базового класса?
this
к (интерфейсу), чтобы вы могли вызвать правильный метод. - person Hans Passant   schedule 25.05.2017