Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > статический extension method


Автор: nmn 4.3.2010, 05:38
здравствуйте

возможно ли создать статический расширяющий метод? т.е. метод который будет привязан к классу, а не к экземпляру класса?

например:

Код

//объявление расширяющего метода для string
string testextension(...)
....

string teststring=string.testextension(....);


Автор: CYBERDREAM 4.3.2010, 07:58
А что значит расширяемый?
Объяви метод статиком, если ты конечно это имел ввиду

Автор: nmn 4.3.2010, 10:03
расширяющий метод, не расширяемый
extension method


пример расширяющего метода, который привязывается к экземпляру класса
Код

static class extclass
{
public static string(this int N) MyToString()
{
return N.ToString();
}
}

int test=100;
Console.WriteLine(test.MyToString());


а нужна привязка к классу
Код

Console.WriteLine(int.MyExtension());

Автор: Ram1reS 4.3.2010, 16:42
Насколько видно из синтаксиса объявления, то нельзя.
(this string str,...) - прямо указывает, что необходим экземляр объекта.

Ищите обходные пути - либо вызывайте статический метод ручками(что в итоге и происходит при использовании extension methods), либо наследуйтесь/пишите класс-обертку.

P.S. для простых типов можно вызывать extension таким образом:

Код

2.MyExtensionMethod();
"Hello".MyExtensionMethod();


P.P.S. Вы не первый кто задается этим вопросом:
http://stackoverflow.com/questions/249222/can-i-add-extension-methods-to-an-existing-static-class
http://stackoverflow.com/questions/2004416/extension-methods-on-a-static-class

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)