如何对常规约束进行分组
本文关键字:约束 常规 | 更新日期: 2023-09-27 18:28:21
我试图将约束组指定为泛型方法,但我不确定这在C#中是否可行。如果是的话,我很难弄清楚语法。目前我有以下几种:
public TOut GetResponse<TOut, TIn>(TIn message)
where TOut : BaseMessageResponse
where TIn : BaseMessageRequest
它的功能非常好。然而,我实际上并没有发送或接收基类消息,而是派生了类。我真正想要的是能够声明组,这样我就可以在编译时判断我是否有不匹配的请求和响应类型。所以我想要的是这样的东西:
public TOut GetResponse<TOut, TIn>(TIn message)
(where TOut : Derived1Response
where TIn : Derived1Request)
(where TOut : Derived2Response
where TIn : Derived2Request)
这是可以在单个方法定义中完成的吗?
还有另一种解决方案,就是为每对请求/响应对象定义一个方法,并让每对对象调用我现在拥有的通用方法,如下所示:
public Derived1Response GetResponse(Derived1Request request)
{
return GetResponse<Derived1Response, Derived1Request>(request);
}
public Derived2Response GetResponse(Derived2Request request)
{
return GetResponse<Derived2Response, Derived2Request>(request);
}
然而,这会使代码膨胀,从而违背了从一开始就使用泛型的目的。
如果是我,我会将泛型定义移到类级别,并为不同的请求/响应类型使用单独的实例。
例如
public myClass<TOut, TIn>
where TOut : BaseMessageResponse
where TIn : BaseMessageRequest
{
public TOut GetResponse(TIn)
{
...
}
}
然后使用:
var derived1Processing = new myClass<Derived1Response, Derived1Request>();
var derived2Processing = new myClass<Derived2Response, Derived2Request>();