Возможный дубликат:
Могу ли я добавить методы расширения к существующему статическому классу?
Есть ли способ добавить статический метод расширения в класс.
В частности, я хочу перегрузить Boolean.Parse, чтобы разрешить аргумент int.
Возможный дубликат:
Могу ли я добавить методы расширения к существующему статическому классу?
Есть ли способ добавить статический метод расширения в класс.
В частности, я хочу перегрузить Boolean.Parse, чтобы разрешить аргумент int.
Короче говоря, нет, вы не можете.
Длинный ответ, методы расширения - просто синтаксический сахар. IE:
Если у вас есть метод расширения для строки, скажем:
public static string SomeStringExtension(this string s)
{
//whatever..
}
Когда вы тогда называете это:
myString.SomeStringExtension();
Компилятор просто превращает это в:
ExtensionClass.SomeStringExtension(myString);
Итак, как вы можете видеть, нет никакого способа сделать это для статических методов.
И еще одна вещь меня осенило: какой смысл добавлять статические методы в существующие классы? Вы можете просто иметь свой собственный вспомогательный класс, который делает то же самое, так что действительно полезно иметь возможность делать:
Bool.Parse(..)
против
Helper.ParseBool(..);
На самом деле не приносит много на стол...
В частности, я хочу перегрузить Boolean.Parse, чтобы разрешить аргумент int.
Будет ли расширение для int работать?
public static bool ToBoolean(this int source){
//do it
//return it
}
Затем вы можете вызвать его так:
int x = 1;
bool y=x.ToBoolean();
Не похоже, что вы можете. См. здесь для обсуждения
Мне бы очень хотелось, чтобы мы были ошибочны.
Вы можете добавить метод расширения к 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();
Нет, но у вас может быть что-то вроде:
bool b;
b = b.YourExtensionMethod();