泛型类型的泛型类型约束

时间:2013-06-19 12:26:30

标签: c# generics type-constraints

我有一个这样的课程:

public class Proxy<TClient>()
    where TClient : ClientBase<TChannel>
{

}

我希望能够指定类似的内容:

where TClient : ClientBase<TChannel>
where TChannel : class

没有在类定义中指定它,如下所示:

public class Proxy<TClient, TChannel>()

有没有办法做到这一点,或者我是否需要如上所述的第二种类型定义?

1 个答案:

答案 0 :(得分:2)

那是不可能的。您必须将TChannel包含为Proxy的通用类型参数。

克服这种“限制”的一个选项(在引号中因为它是由C#类型系统如何工作而产生的设计特征)是使用每个通道应该实现的接口: / p>

public interface IChannel { … }

public class Proxy<TClient>()
    where TClient : ClientBase<IChannel>
{ 
}

public class MyObscureChannel : IChannel { … }

public class MyObscureClient : ChannelBase<MyObscureChannel> { … }

…

var client = new Proxy<MyObscureClient>(…); // MyObscureChannel is implied here