gpt4 book ai didi

c# - 通用类型的通用类型约束

转载 作者:太空宇宙 更新时间:2023-11-03 11:02:28 25 4
gpt4 key购买 nike

我有这样一个类:

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

}

我希望能够指定这样的内容:

where TClient : ClientBase<TChannel>
where TChannel : class

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

public class Proxy<TClient, TChannel>()

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

最佳答案

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

克服此“限制”(在引号中是因为它是 C# 类型系统工作方式产生的设计特性)的一种选择是使用每个 channel 都应该实现的接口(interface):

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

关于c# - 通用类型的通用类型约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17191162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com