实现一个泛型类,该类具有需要泛型的约束



我有以下代码:

public class Generic1<T, T2> where T : Generic2<T2>
where T2 : new()
{
}

public class Generic2<T> where T : new()
{
public T GetT()
{
return new T();
}
}

这使得有可能做到:

var g = new Generic1<Generic2<int>, int>();

但我真正想要的是像这样使用它(但保留它必须是Generic2类型的约束(:

var g = new Generic1<Generic2<int>();

既然T2已经很清楚了,为什么我必须单独指定它?我做不到:

var g = new Generic1<Generic2<int>, double>();

那么,有没有办法改变Generic1或Generic2来实现这一点?类似:

public class Generic1<T> where T : Generic2<T2>
{
}

但这并不能编译:(

编辑I

也许我问错了。这是一个非常简单的例子。我需要T是Generic2 类型

如果T总是Generic2<T2>,那么你就不需要T,只需要把它去掉。你只需要用Generic2<T2>替换Generic1中每次出现的T

示例:如果Generic1当前如下所示:

public class Generic1<T, T2> where T : Generic2<T2> where T2 : new()
{
public T DoSomething() { ... }
public T2 DoSomethingElse() { ... }
}

您可以将其替换为:

public class Generic1<T2> where T2 : new()
{
public Generic2<T2> DoSomething() { ... }
public T2 DoSomethingElse() { ... }
}

Generic1现在可以简单地实例化为:

var g = new Generic1<int>(); 

(显然,您可以在之后将T2重命名为T。(

最新更新