C# 我可以使用递归约束来定义泛型类吗

C# 我可以使用递归约束来定义泛型类吗,c#,generics,C#,Generics,在我最喜欢的一个项目中,我发现自己经常使用泛型,我想知道是否可以在泛型类中使用递归约束 让我们假设我有以下界面 public interface IAmSpecial {} 实现它的类可以由自己的类处理 public class SpecialHandler<T> where T: IAmSpecial {} 但是我无法构建它,因为任何SpecialHandler实现都将关闭IAmSpecial的一个实现上的通用值。我也不能申报类似的东西 public class Special

在我最喜欢的一个项目中,我发现自己经常使用泛型,我想知道是否可以在泛型类中使用递归约束

让我们假设我有以下界面

public interface IAmSpecial {}
实现它的类可以由自己的类处理

public class SpecialHandler<T> where T: IAmSpecial {}
但是我无法构建它,因为任何
SpecialHandler
实现都将关闭
IAmSpecial
的一个实现上的通用值。我也不能申报类似的东西

public class SpecialWrapperHandler<SpecialHandler<T>> where T : IAmSpecial
public类SpecialWrapperHandler其中T:iamsspecial

那么有没有可能有一个递归泛型约束的C#构造,这样我就可以使用我的
SpecialWrapperHandler
?如果是,我应该使用什么构造?如果没有,原因是什么?快速读取文档中的不会产生很多答案…

为处理程序传入第二个类型参数。这样,您可以同时键入这两个参数

像这样:

public class SpecialWrapperHandler<H, T> where H : SpecialHandler<T> where T : IAmSpecial
{
    public SpecialWrapperHandler(T t){}
}
公共类SpecialRapperHandler其中H:SpecialHandler其中T:IAMSSpecial
{
公共特殊rapperhandler(T){}
}
证明:

public class X : IAmSpecial { }

public class XHandler : SpecialHandler<X> { }

static void Main(string[] args)
{
    X x = new X();
    SpecialWrapperHandler<XHandler, X> v = new SpecialWrapperHandler<XHandler, X>(x);
}
公共类X:IAmSpecial{}
公共类XHandler:SpecialHandler{}
静态void Main(字符串[]参数)
{
X=新的X();
SpecialRapperHandler v=新的SpecialRapperHandler(x);
}

尝试接受2个泛型参数。回想起来,这一点非常明显:(。较高级别的泛型必须已经知道较低级别的泛型将关闭的类型。谢谢
public class SpecialWrapperHandler<H, T> where H : SpecialHandler<T> where T : IAmSpecial
{
    public SpecialWrapperHandler(T t){}
}
public class X : IAmSpecial { }

public class XHandler : SpecialHandler<X> { }

static void Main(string[] args)
{
    X x = new X();
    SpecialWrapperHandler<XHandler, X> v = new SpecialWrapperHandler<XHandler, X>(x);
}