Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用接口和显式实现的函数重载_C#_Generics_Interface_Overloading - Fatal编程技术网

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

C# 使用接口和显式实现的函数重载,c#,generics,interface,overloading,C#,Generics,Interface,Overloading,我有以下界面: public interface Iface { void Sample1(); void Sample1(bool value); } 实现如下所示。注意:要求Sample1的实现是显式的(由于通用约束voodoo) 但是,尝试调用重载会导致以下错误: 错误5“myCLass”不包含“Sample1”的定义,并且找不到接受类型为“myCLass”的第一个参数的扩展方法“Sample1”(是否缺少using指令或程序集引用?) 一句话:

我有以下界面:

   public interface Iface
   {
      void Sample1();
      void Sample1(bool value);
   }
实现如下所示。注意:要求Sample1的实现是显式的(由于通用约束voodoo)

但是,尝试调用重载会导致以下错误:

错误5“myCLass”不包含“Sample1”的定义,并且找不到接受类型为“myCLass”的第一个参数的扩展方法“Sample1”(是否缺少using指令或程序集引用?)


一句话:我想我不确定在同一个接口中调用“other”重载应该使用什么语法。

因为您要显式实现接口,所以需要将自己转换到接口:

((IDrilldown)this).Sample1(true);
((IDrilldown)this).Sample1(true);
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
}
或者,如果您不喜欢在线演员阵容:

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

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

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

((IDrilldown)this).Sample1(true);
((IDrilldown)this).Sample1(true);
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
}
或者,如果您不喜欢在线演员阵容:

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

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

显式接口实现不是公共方法。
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
}
只能通过强制转换到接口来调用它们:

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

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

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

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

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

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
}

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

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

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
}

是的,我的错误消息没有项目的正确措辞,在发布之前忘记将其更改为“示例文本”。是的,我的错误消息没有项目的正确措辞,在发布之前忘记将其更改为“示例文本”。