实现扩展方法接口C#

时间:2012-06-14 18:12:26

标签: c# interface extension-methods

我是C#的新手,并且理解我应该如何实现接口的扩展方法。我没有找到关于这个问题的任何材料。从我在C#中发现的关于一般扩展方法的材料中,我期望以下简单的演示示例工作:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace testExtension
{
public  interface  IcheckThingsOut
{
   bool x();
}
public static class extensionInterface
{
   public static bool y(this IcheckThingsOut bla) { return true;}
}
public class implementInteface : IcheckThingsOut
{
   bool IcheckThingsOut.x()
   {
       return true;
   }
   bool IcheckThingsOut.y()
   {
       return false;

   }
}
}

但是编译器仍然不满意。我错过了什么,这里的语法是什么(与代码语义相同)?

5 个答案:

答案 0 :(得分:3)

你搞砸了扩展方法和接口的概念。扩展方法只是在静态类上调用静态方法的编译器方便方法。它们不扩展接口。使用扩展方法时编译器的作用是:

  IcheckThingsOut instance = new IcheckThingsOutImpl();
  instance.y();

...将转换为:

  IcheckThingsOut instance = new IcheckThingsOutImpl();
  extensionInterface(instance, y);

正如您所看到的,y不是您界面上的方法。这就是为什么你不能在实现中明确地实现它。

答案 1 :(得分:3)

您似乎想要使用的是“扩展方法”。为此目的,您的extensionInterface课程已正确实施。

但是,创建扩展方法实际上并不扩展您的接口,因此尽管您可以调用myIcheckThingsOut.y(),但您无法在隐式或显式实现IcheckThingsOut的类中重新实现该方法。 / p>

答案 2 :(得分:2)

您无法在"扩展"内部更改扩展方法的实现。类或接口。扩展方法是实现。

扩展方法提供了一种方法来添加"接口或类的方法。整个想法是你扩展的界面或类不会'#34;知道"关于这些方法。换句话说,你"添加"功能而不改变类或接口本身。

(请注意,虽然符号表示您正在向接口添加方法,但实际上,就运行时而言,这些方法是纯静态方法。)

答案 3 :(得分:1)

bool IcheckThingsOut.y()
{
    return false;

}

错误:IcheckThingsOut没有为函数y提供原型。它应该只是

bool y()
{
    return false;
}

因为它只是影响其他方法

答案 4 :(得分:0)

IcheckThingsOut没有bool y()