一种解决方案是子类化。我要使用的另一个方法是工厂方法(与var关键字结合)。
public class MyTemplate<T1,T2>
{
public MyTemplate(..args..) { ... } // constructor
}
public static class MyTemplate{
public static MyTemplate<T1,T2> Create<T1,T2>(..args..)
{
return new MyTemplate<T1, T2>(... params ...);
}
public static MyTemplate<T1, string> Create<T1>(...args...)
{
return new MyTemplate<T1, string>(... params ...);
}
}
var val1 = MyTemplate.Create<int,decimal>();
var val2 = MyTemplate.Create<int>();
在上面的示例中,val2
是类型,MyTemplate<int,string>
而不是从其派生的类型。
类型class MyStringTemplate<T>:MyTemplate<T,string>
与的类型不同MyTemplate<T,string>
。在某些情况下,这可能会带来一些问题。例如,您不能将的实例转换MyTemplate<T,string>
为MyStringTemplate<T>
。