关于c#:静态扩展方法

Static extension methods

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Can I add extension methods to an existing static class?

有没有任何方法可以将静态扩展方法添加到类中?

具体来说,我想重载boolean.parse以允许int参数。


简而言之,不,你不能。

答案很长,扩展方法只是语法上的糖分。IE:

如果您对字符串有一个扩展方法,那么让我们假设:

1
2
3
4
public static string SomeStringExtension(this string s)
{
   //whatever..
}

当你称之为:

1
myString.SomeStringExtension();

编译器只是将其转换为:

1
ExtensionClass.SomeStringExtension(myString);

因此,正如您所看到的,对于静态方法,没有办法做到这一点。

另外一件事我才明白:能够在现有类上添加静态方法的真正意义是什么?您可以只拥有自己的助手类来做同样的事情,所以能够做的真正好处是:

1
Bool.Parse(..)

VS

1
Helper.ParseBool(..);

不会给桌子带来太多…


specifically I want to overload Boolean.Parse to allow an int argument.

int的扩展是否有效?

1
2
3
4
public static bool ToBoolean(this int source){
    //do it
    //return it
}

然后你可以这样称呼它:

1
2
3
int x = 1;

bool y=x.ToBoolean();


看起来你做不到。关于它的讨论见这里

不过,我很想被证明是错的。


可以向int添加扩展方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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;
    }
}

像这样使用

1
2
3
4
5
6
        bool bool1 = 0.Parse();
        bool bool2 = 1.Parse();

        bool? bool3 = 0.Parse2();
        bool? bool4 = 1.Parse2();
        bool? bool5 = 3.Parse2();


不,但是你可以有这样的东西:

1
2
bool b;
b = b.YourExtensionMethod();