2

我有这样的课:

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

}

我希望能够指定如下内容:

where TClient : ClientBase<TChannel>
where TChannel : class

没有像这样在类定义中指定它:

public class Proxy<TClient, TChannel>()

有没有办法做到这一点,或者我需要像上面那样定义第二种类型?

4

1 回答 1

2

那是不可能的。您必须将TChannel其作为泛型类型参数包含在内Proxy

克服这个“限制”的选项之一(在引号中,因为它是由 C# 类型系统的工作方式产生的设计特性)是使用每个通道都应该实现的接口:

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
于 2013-06-19T12:28:27.060 回答