我们假设我们有以下类:
class ViewModelA
{
private ProxyA proxy;
public ViewModelA(DataA data)
{
proxy = new ProxyA(data);
}
public void DoSth()
{
proxy.DoSth();
}
public ProxyA Proxy
{
get
{
return proxy;
}
}
}
class ViewModelB
{
private ProxyB proxy;
public ViewModelB(DataB data)
{
proxy = new ProxyB(data);
}
public void DoSth()
{
proxy.DoSth();
}
public ProxyB Proxy
{
get
{
return proxy;
}
}
}
...
Run Code Online (Sandbox Code Playgroud)
所有这些类实际上都要长得多,但在相同程度上也相似.
是否有(好的)方法将它们全部转换为一个泛型类?核心问题是这条线:
proxy = new ProxyA(data);
Run Code Online (Sandbox Code Playgroud)
因为C#不允许在泛型类专业化(就其而言T)上调用参数化ctors .
如果您知道类型(并且您会使用泛型),则可以调用Activator.CreateInstance使用您想要的任何构造函数创建该类型的实例。
proxy = Activator.CreateInstance(typeof(TProxy), new[]{data});
Run Code Online (Sandbox Code Playgroud)
虽然这将解决您的直接问题,但您也可以考虑一种ViewModelA不知道DataA而是通过ProxyA. 这将解决你所有的问题,无需花哨的思考。