Помогите с дженериками? Как определить общий метод? - PullRequest
0 голосов
/ 27 марта 2010

Можно ли создать универсальный метод с определением, аналогичным:

public static string GenerateWidget<TypeOfHtmlGen, WidgetType>(this HtmlHelper htmlHelper
                                           , object modelData) 

// TypeOfHtmlGenerator is a type that creates custom Html tags. 
// GenerateWidget creates custom Html tags which contains Html representing the Widget.

Я могу использовать этот метод для создания любого вида виджетов, содержащихся в тегах любого типа.

Спасибо

Ответы [ 2 ]

2 голосов
/ 27 марта 2010

Да, вы можете написать этот общий метод расширения.Но так как он не использует ни один из своих параметров типа в сигнатуре функции, вам всегда придется указывать типы.Это означает, что вы не можете использовать:

 string r = helper.GenerateWidget(modelData);

, но вам всегда понадобится:

 string r = helper.GenerateWidget<SpecificHtmlGenerator, SpecificWidget>(modelData);
1 голос
/ 27 марта 2010

Есть несколько улучшений, которые вы, возможно, захотите добавить, потому что похоже, что вам придется создавать эти классы в вашем методе:

public static string GenerateWidget<TypeOfHtmlGen, WidgetType>(this HtmlHelper htmlHelper
                                           , object modelData)
    where TypeOfHtmlGen: new()
    where WidgetType: new()
{
    // Awesome stuff
}

Кроме того, вы, вероятно, захотите, чтобы виджет и html gen добавляли какой-то интерфейс или базовый класс:

public static string GenerateWidget<TypeOfHtmlGen, WidgetType>(this HtmlHelper htmlHelper
                                           , object modelData)
    where TypeOfHtmlGen: HtmlGenBaseClass, new()
    where WidgetType: WidgetBaseClass, new()
{
    // Awesome stuff
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...