可能重复:
Can I add extension methods to an existing static class?
有没有办法可以为类添加静态扩展方法。
具体来说我想重载Boolean.Parse以允许int参数。
答案 0 :(得分:143)
总之,不,你不能。
答案很长,扩展方法只是语法糖。 IE:
如果您对字符串有扩展方法,请说:
public static string SomeStringExtension(this string s)
{
//whatever..
}
然后你打电话给它:
myString.SomeStringExtension();
编译器只需将其转换为:
ExtensionClass.SomeStringExtension(myString);
正如您所看到的,静态方法无法做到这一点。
另一件事让我意识到:能够在现有类上添加静态方法的点究竟是什么?你可以拥有自己的助手类来做同样的事情,所以能够做到的好处是什么:
Bool.Parse(..)
VS
Helper.ParseBool(..);
实际上没有带来太多的东西......
答案 1 :(得分:74)
具体来说我想重载Boolean.Parse以允许int参数。
int的扩展是否有效?
public static bool ToBoolean(this int source){
//do it
//return it
}
然后你可以这样称呼它:
int x = 1;
bool y=x.ToBoolean();
答案 2 :(得分:3)
看起来不像你。 See here for a discussion on it
我非常希望被证明是错误的。
答案 3 :(得分:-2)
您可以向int
添加扩展方法public static class IntExtensions
{
public static bool Parse(this int value)
{
if (value == 0)
{
return true;
}
else
{
return false;
}
}
public static bool? Parse2(this int value)
{
if (value == 0)
{
return true;
}
if (value == 1)
{
return false;
}
return null;
}
}
像这样使用
bool bool1 = 0.Parse();
bool bool2 = 1.Parse();
bool? bool3 = 0.Parse2();
bool? bool4 = 1.Parse2();
bool? bool5 = 3.Parse2();
答案 4 :(得分:-8)
不,但你可能有类似的东西:
bool b;
b = b.YourExtensionMethod();