我有一个这样的课程:
public class Proxy<TClient>()
where TClient : ClientBase<TChannel>
{
}
我希望能够指定类似的内容:
where TClient : ClientBase<TChannel>
where TChannel : class
但没有在类定义中指定它,如下所示:
public class Proxy<TClient, TChannel>()
有没有办法做到这一点,或者我是否需要如上所述的第二种类型定义?
答案 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