【发布时间】:2020-05-29 03:17:20
【问题描述】:
我在不同的命名空间中有一些同名的模型,例如:
A.Request
A.Response
B.Request
B.Response
等
而且我有通用签名的接口:
interface IA : Common
{
A.Response Do(A.Request);
}
interface IB : Common
{
B.Response Do(B.Request);
}
我想创建一个所有接口都遵守的通用接口:
interface ICommon
{
Response Do(Request);
}
但这似乎不起作用,因为它总是会尝试复制方法而不是在继承的接口上应用规则。
我尝试使用dynamic或object
interface ICommon
{
dynamic Do(dynamic);
}
我什至尝试为模型创建一个通用接口,例如:
A.Request : IRequest
A.Response : IResponse
B.Request : IRequest
B.Response : IResponse
interface ICommon
{
IResponse request Do(IRequest);
}
但似乎没有任何效果。
我想要的只是让这些接口具有相同的签名,实现相同的方法,但使用不同名称空间的模型,我找不到方法来做到这一点。 也许接口不打算用来对继承的接口强加通用规则,所以我想找到一种方法来做到这一点。
我想避免使用泛型,因为我已经尝试过了,但它不起作用,因为模型是密封的,你不能拥有 where IRequest: A.Requestrule。
interface ICommon
{
Tresponse Do<TRequest,TResponse>(TRequest);
}
interface IA
{
A.Response Do<TRequest,TResponse>(A.Request) where TRequest: A.Request, TResponse: B.Response; <- not allowed
}
【问题讨论】:
标签: c# inheritance interface