2010-10-07 79 views
4

根据微软的说法,“扩展方法是一种特殊的静态方法,但它们被称为好像它们是扩展类型上的实例方法”。你可以添加你称之为静态方法的扩展方法吗?

有没有办法添加它调用的扩展方法,就好像它是静态方法?或者做一些有相同效果的东西?

编辑: 我的意思是“调用,就好像它是一个扩展类的静态方法”。 对不起,不明确。

+1

不,并有一些讨论在http://stackoverflow.com/questions/638850 – 2010-10-07 01:03:00

+0

@Joe:“不”,是什么?请参阅下面的答案。 – 2010-10-07 01:04:34

+1

@Michael:我的意思不是,C#不支持可以在目标类上调用静态方法的扩展方法。该链接讨论了为什么不支持。你可以在扩展类上静态调用扩展方法,但我认为他是在问前者。 – 2010-10-07 01:08:31

回答

13

根据微软的说法,“扩展方法是一种特殊的静态方法,但它们被称为是扩展类型上的实例方法”。

是的,扩展方法是静态方法。它们都可以以常规方式作为静态方法调用,作为扩展实例方法在它们“扩展”的类型上调用,甚至可以在空引用上作为扩展方法调用它们。

例如:

public static class Extensions { 
    public static bool IsNullOrEmpty(this string theString) { 
     return string.IsNullOrEmpty(theString); 
    } 
} 

// Code elsewhere. 
string test = null; 
Console.WriteLine(test.IsNullOrEmpty()); // Valid code. 
Console.WriteLine(Extensions.IsNullOrEmpty(test)); // Valid code. 

编辑:

有没有办法添加一个扩展方法,它叫,就好像它是一个静态方法?

你的意思是你想调用,例如,string.MyExtensionMethod()?在这种情况下,不,没有办法做到这一点。

+0

是的,我的意思是。我拿着“用C#编写的客户端代码,调用扩展方法和实际定义在类型中的方法之间没有明显区别”,并且没有想到我可以在空引用上调用它们。 – Spike 2010-10-07 02:58:11

4

扩展方法静态方法。你不需要做任何事情。

将扩展方法与任何其他静态方法区分开来的唯一方法是,它可以被调用,就好像它是一个实例方法,另外被正常调用为静态方法。

相关问题