帮助泛型?如何定义通用方法?

时间:2010-03-26 21:29:14

标签: c# asp.net-mvc generics

是否可以创建一个类似于以下定义的泛型方法:

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.

我可以使用此方法创建任何类型的Html标记中包含的任何类型的小部件。

由于

2 个答案:

答案 0 :(得分:2)

是的,您可以编写此通用扩展方法。但由于它不在函数签名中使用任何类型参数,因此您始终必须指定类型。这意味着你不能使用:

 string r = helper.GenerateWidget(modelData);

但你总是需要:

 string r = helper.GenerateWidget<SpecificHtmlGenerator, SpecificWidget>(modelData);

答案 1 :(得分:1)

您可能希望添加一些改进,因为您似乎必须在方法中实例化这些类:

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

此外,您可能希望widget和html gen能够实现某种接口或基类:

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