如何在C#中调用基类的显式接口方法?

时间:2017-05-25 14:28:15

标签: c# explicit-interface

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来访问方法的基类版本。但是通过显式接口实现,这种语法不是有效的。此外,为了调用方法,无法将基础转换为接口。

如何在基类的显式接口实现中访问逻辑?

1 个答案:

答案 0 :(得分:1)

我希望这很有用:

 public abstract class BaseClass : IDisposable
 {
        public int Value;
        void IDisposable.Dispose() => DoSomething();
        public void DoSomething() => Value = 1;
 }

 public class SubClass : BaseClass, IDisposable
 {
        void IDisposable.Dispose()
        {
            if (Condition())
                DoSomething();
            else
                DoSomethingElse();
        }

        void DoSomethingElse() => Value = 2;

        private bool Condition()
        {
            return true;
        }


 }