使用不同参数重载泛型方法以减少冗余
本文关键字:冗余 泛型方法 重载 参数 | 更新日期: 2023-09-27 18:10:59
我试图更好地理解泛型,但我卡住了,因为我想重构我的代码示例,但它不起作用,我的理解不够好,无法看到为什么以及如何修复它:
我的例子只是为了教育的目的,所以我不担心性能或内存泄漏等…
public static void InstanceView<TView, TViewModel>()
where TView : Window
where TViewModel : class, new()
{
var viewToInstance = (TView) Activator.CreateInstance(typeof (TView), new TViewModel());
viewToInstance.ShowDialog();
viewToInstance.Close();
}
public static void InstanceView<TView>()
where TView : Window
{
var viewToInstance = (TView)Activator.CreateInstance(typeof(TView));
viewToInstance.ShowDialog();
viewToInstance.Close();
}
我不想要冗余
viewToInstance.ShowDialog();
viewToInstance.Close();
目前我的解决方案是:
private static void displayHandle<T>(T window) where T : Window
{
window.ShowDialog();
window.Close();
}
我在InstanceView实现中调用这个而不是ShowDialog()等
我试过这样做:
public static void InstanceView<TView>()
where TView : Window
{
InstanceView<TView, null>;
}
但是它不起作用。有办法做到这一点吗?
PS:我正在使用Visual Studio 2010
提前感谢!
但是它不起作用。有办法做到这一点吗?
null
不是类型参数。更具体地说,在c#中,它甚至不是一个类型。由于您对TViewModel
的约束是使用默认构造函数的引用类型,因此您可以将object
类型传递给它,或任何符合约束的其他引用类型:
public static void InstanceView<TView>()
where TView : Window
{
InstanceView<TView, object>;
}
public class Void { }
public static void InstanceView<TView>()
where TView : Window
{
InstanceView<TView, Void>;
}