是否可以创建一个类似于以下定义的泛型方法:
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标记中包含的任何类型的小部件。
由于
答案 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
}