Can static methods implement an interface in .NET
Possible Duplicate:
Why Doesn’t C# Allow Static Methods to Implement an Interface?
我有这样的代码,它说我不能实现静态方法:
1 2 3 4 5 6 7 8
| public static class AuxiliaryHelper : IAuxiliaryHelper
{
/// <summary>
/// Writes the response.
/// </summary>
/// <param name="jsonObj">The json object that gets turned in JSON and written out.</param>
public static void WriteResponse(this object jsonObj)
{ .... |
能给我一个接口吗?
- 不。。。(需要更多字符)
- 这没有道理。你想要它做什么?
- 好吧,THX,你们都是对的
简短回答:不。
更长的答案:
这个概念没有任何意义。接口的要点是定义描述各种实现的契约的基类型。我可以使用IFoo的静态类型声明变量,它告诉编译器我不知道在运行时这是什么类型,但我向您保证它将有一组特定的方法。-因此,编译器将允许您调用这些方法,这些方法将在运行时解析。
静态方法总是绑定到一个且只有一个类,因此没有可引用的实例。
- 我有点不同意"完全没用"—有时我会遇到不同类型的情况,我想查询类型以获取一些信息,例如,通过实现接口或添加属性不容易表达的支持功能,而不需要为此创建实例。我通常通过创建单独的类型来解决这个问题,唯一的目的是描述其他类型。
- @Danielbr&252;ckner-如果您传递一个对类本身的引用,这可能是有意义的。我认为这与接口完全不同,接口允许对象的静态类型与其动态类型不同。
- 不完全是我想做的。例如,我曾经创建了一个允许构建数据处理管道的可视化设计器。每个构建块被实现为一个具有一些接口的类-一个用于添加两个数字的块,一个用于多路复用两个输入的块,…如果可以通过静态接口提取每个构建基块的信息,而不是创建描述符类或丢弃实例,我会非常喜欢它,因为在用户将实例放置到设计图面之前,需要这些信息。
- @是的,这就是元数据的作用。Web部件、活动记录、Web服务等框架都使用元数据属性来描述此类类型信息。
- 是的,但有时字符串和整数等都不够表达。解决这个问题肯定不难,但有时静态接口真的很方便。
不,接口不能有静态方法。实现接口的类需要将它们全部实现为实例方法。静态类不能有实例方法。
我注意到,你使用了一种扩展方法。也许这种变化可以帮助你。
元代码
1 2 3 4 5 6 7 8 9 10 11 12 13
| public static class HelperExtensions
{
//Note the interface goes here
public static void WriteResponse (this IAuxiliaryHelper helper,
object jsonObj )
{
//omn nom nom
}
}
//somewhere else - usage
IAuxiliaryHelper h = new Foo ();
h .WriteResponse(new JsonObject ()); |