我想指定約束組到一個通用的方法,但我不確定這甚至可能在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);
}
然而,這會使代碼膨脹,從而破壞了使用泛型的目的。
你爲什麼要指定類型(或爲什麼他們需要的是具體的),另一方面,當你限制他們呢?這可能是真正的問題。 – CSharpie
@CSharpie這是因爲我接口的API。請求和響應對象具有由第三方定義的所有屬性,這些屬性正在被JSON序列化並從JSON序列化。對於特定的請求對象,我希望收到一個特定的響應對象。這就是爲什麼我想要成對限制它們。 –