我是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;
}
}
}
但是编译器仍然不满意。我错过了什么,这里的语法是什么(与代码语义相同)?
答案 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()