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

时间:2011-06-13 18:06:38

标签: c# generics interface overloading

我有以下界面:

   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'的定义,并且没有扩展方法'Sample1'可以找到类型为'myCLass'的第一个参数(您是否缺少using指令或程序集引用?)Q :\ common \ VisualStudio \ Charting \ Drilldowns.cs 18 15图表

结论:我认为我不确定在同一界面中调用'other'重载的语法。

3 个答案:

答案 0 :(得分:3)

由于您正在实现接口,您需要将自己投射到界面:

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

或者,如果您不喜欢在线演员:

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

如果您执行了正常的隐式实现,则可以直接调用该方法。显式接口实现仅可用于专门定义为该接口的变量。

答案 1 :(得分:3)

显式接口实现不是公共方法 您只能通过强制转换到界面来调用它们:

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

答案 2 :(得分:0)

我认为您的代码在重命名时搞砸了,或者其中包含一些未包含在问题中的代码(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
}