C# 使用接口将公共规则应用于继承的接口

C# 使用接口将公共规则应用于继承的接口,c#,inheritance,interface,C#,Inheritance,Interface,我在不同的名称空间中有一些同名的模型,例如: A.Request A.Response B.Request B.Response A.Request : IRequest A.Response : IResponse B.Request : IRequest B.Response : IResponse interface ICommon { IResponse request Do(IRequest); } 等 并且我有具有公共签名的接口: interface IA : Common

我在不同的名称空间中有一些同名的模型,例如:

A.Request
A.Response
B.Request
B.Response
A.Request : IRequest
A.Response : IResponse
B.Request : IRequest
B.Response : IResponse

interface ICommon
{
  IResponse request Do(IRequest);
}

并且我有具有公共签名的接口:

interface IA : Common
{
  A.Response Do(A.Request);
}

interface IB : Common
{
  B.Response Do(B.Request);
}
我想创建一个所有接口都将遵循的通用接口:

interface ICommon
{
  Response Do(Request);
}
但这似乎不起作用,因为它总是尝试复制方法,而不是在继承的接口上应用规则

我尝试使用
动态
对象

interface ICommon
{
  dynamic Do(dynamic);
}
我甚至尝试为模型创建一个公共接口,例如:

A.Request
A.Response
B.Request
B.Response
A.Request : IRequest
A.Response : IResponse
B.Request : IRequest
B.Response : IResponse

interface ICommon
{
  IResponse request Do(IRequest);
}
但似乎什么都不管用

我只想让这些接口具有相同的签名,实现相同的方法,但使用不同名称空间的模型,我找不到方法来实现。 也许接口不是用来在继承的接口上强加公共规则的,所以我想找到一种方法来做到这一点

我想避免使用泛型,因为我已经尝试过了,但它不起作用,因为模型是密封的,您不能有
where IRequest:a.Request
规则

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
}
接口ICommon
{
t响应Do(TRequest);
}
接口IA
{

A.响应Do(A.请求),其中TRequest:A.请求,treresponse:B.响应;您想做以下工作吗

class ARequest: IRequest {
}

class AResponse: IResponse {
}

interface IRequest {
}

interface IResponse {
}

interface ICommon<TRequest, TResponse> where TRequest: IRequest where TResponse: IResponse
{
  TResponse Do(TRequest request);
}

interface IA: ICommon<ARequest, AResponse>
{
   AResponse Do(ARequest r);
}
类请求:IRequest{
}
类响应:I响应{
}
接口IRequest{
}
接口响应{
}
接口ICommon where TRequest:IRequest where treResponse:IResponse
{
treresponse Do(TRequest请求);
}
接口IA:ICommon
{
AResponse Do(ARequest r);
}
还是这个

interface IA: ICommon<IRequest, IResponse>
{
   AResponse Do<IRequest, IResponse>(ARequest r)
       where IRequest: ARequest 
       where IResponse: AResponse;
}
接口IA:ICommon
{
AResponse Do(ARESQUEST r)
IRequest:ARequest在哪里
其中i响应:AResponse;
}

很有希望!让我选择否,因为接口有多个方法。IRequest和IResponse映射到类,如ARequest1、ARequest2、ARequest3等,所有这些都实现了IRequest。它需要在方法级别上完成。这是我以前尝试过的,这是不允许的,因为ARequest是一个密封的类,编译器抱怨它应该ldn未被密封。我尝试将IA和IB设置为实现ICommon的抽象类,但它需要IRequest,如果将A.Request提供给抽象类,它仍会抱怨,即使A.Request实现IRequest:(