Ответ 1

Короче говоря, нет, вы не можете.

Длинный ответ, методы расширения - просто синтаксический сахар. IE:

Если у вас есть метод расширения для строки, скажем:

public static string SomeStringExtension(this string s)
{
   //whatever..
}

Когда вы тогда называете это:

myString.SomeStringExtension();

Компилятор просто превращает это в:

ExtensionClass.SomeStringExtension(myString);

Итак, как вы можете видеть, нет никакого способа сделать это для статических методов.

И еще одна вещь меня осенило: какой смысл добавлять статические методы в существующие классы? Вы можете просто иметь свой собственный вспомогательный класс, который делает то же самое, так что действительно полезно иметь возможность делать:

Bool.Parse(..)

против

Helper.ParseBool(..);

На самом деле не приносит много на стол...

Ответ 2

В частности, я хочу перегрузить Boolean.Parse, чтобы разрешить аргумент int.

Будет ли расширение для int работать?

public static bool ToBoolean(this int source){
    //do it
    //return it
}

Затем вы можете вызвать его так:

int x = 1;

bool y=x.ToBoolean();

Ответ 4

Вы можете добавить метод расширения к 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();

Ответ 5

Нет, но у вас может быть что-то вроде:

bool b;
b = b.YourExtensionMethod();