函数重载使用接口和显式实现

本文关键字:实现 接口 重载 函数 | 更新日期: 2023-09-27 17:58:58

我有以下接口:

   public interface Iface
   {
      void Sample1();
      void Sample1(bool value);
   }

实现如下所示。注:要求Sample1的实现是显式的(由于通用约束voodoo)

   public class myCLass : Iface
   {
      void Iface.Sample1()
      {
         this.Sample1(true);
      }
      void Iface.Sample1(bool value)
      {
      }
   }

然而,试图调用重载会导致以下错误:

错误5"myCLass"不包含"Sample1"的定义,并且找不到接受类型为"myCLass"的第一个参数的扩展方法"Sample1"(是否缺少using指令或程序集引用?)Q:''common''VisualStudio''Charting''Drillowns.cs 18 15 Charting

一句话:我想我不确定应该使用什么语法来调用同一接口中的"other"重载。

函数重载使用接口和显式实现

由于您显式地实现了接口,因此您需要将自己转换为接口:

((IDrilldown)this).Sample1(true);

或者,如果你不喜欢直列演员阵容:

IDrilldown idd = (IDrilldown)this;
idd.Sample1(true);

如果你做了一个普通的隐式实现,你就可以直接调用这个方法。显式接口实现只能在特定定义为该接口的变量上使用。

显式接口实现不是公共方法
您只能通过转换到接口来调用它们:
((IDrilldown)this).Sample1(true);

我认为您的代码在重命名时出错了,或者其中有一些代码没有包含在问题中(DFResults,IDrilldown)。我假设DFResults应该是MyClass,IDrilldown应该是Iface。

因此,您有一个接口IFace,它声明了2个方法。您有一个实现接口的类,EXPLICITLY实现该接口。您似乎接受了它必须是显式的,但这样,您就不能通过类调用方法,只能通过强制转换到接口。

public interface IFace
{
   void SampleFunc();
}
public class MyClass : IFace
{
   void IFace.SampleFunc();
}
public static void Program()
{
   MyClass instance = new MyClass();
   instance.SampleFunc(); //Illegal
   ((IFace)instance).SampleFunc(); Legal
}