静态扩展方法

时间:2009-05-15 03:57:04

标签: c# extension-methods

  

可能重复:
  Can I add extension methods to an existing static class?

有没有办法可以为类添加静态扩展方法。

具体来说我想重载Boolean.Parse以允许int参数。

5 个答案:

答案 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();