c# - 如何在 C# 中的基类上调用显式接口(interface)方法?

标签 c# explicit-interface

C# 具有一个有用的显式接口(interface)功能,可让您创建实现接口(interface)的方法,同时避免潜在的名称冲突。

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

您甚至可以在子类中覆盖这些方法,只要子类还明确列出它实现了该接口(interface)即可。

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 来访问方法的基类版本。但是对于显式接口(interface)实现,此语法无效。此外,无法将您的基类转换为接口(interface)以调用该方法。

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

最佳答案

我希望这对您有用:

 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;
        }


 }

关于c# - 如何在 C# 中的基类上调用显式接口(interface)方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44183055/

相关文章:

c# - 有没有一个可以复制 Java 代码并粘贴为 C# 代码的插件?

c# - 带有特定标签的 String.Split

c# - 为什么调用哪个接口(interface)方法很重要?

c# - 有没有办法在构造函数中初始化 EII 属性?

c# - 显式接口(interface)实现限制

c# - 为什么 VS 元数据 View 不显示显式接口(interface)实现的成员

c# - 自定义属性和 lambda 表达式

c# - 在 PHP 中通过 COM 访问 .NET 程序集

c# - 显式实现的接口(interface)中的可选参数

c# - WIA 扫描仪,无法获取/设置 4104 和 6146 属性(颜色、颜色深度)