基本上,我正在尝试做这样的事情:
SomeRequest request = new SomeRequest();
SomeResponse response = request.GetResponse();
List<Stuff> stuff = response.GetData();
SomeRequest 和 SomeResponse 是分别实现 IRequest 和 IResponse 接口的类:
public class SomeRequest : IRequest<SomeResponse>
{
public SomeResponse GetResponse() { ... }
}
public class SomeResponse : IResponse<List<Stuff>>
{
public List<Stuff> GetData() { ... }
}
我的 IResponse 界面如下所示:
public interface IResponse<T>
{
T GetData();
}
我遇到的问题是我的 IRequest 接口。我希望我的 IRequest 接口的泛型 (T) 属于 IResponse< T > 类型。
public interface IRequest<T> where T : ?????
{
T GetResponse();
}
我不知道我应该在“where T”之后放什么。
我在这里找到了两个解决方案:C# generic "where constraint" with "any generic type" definition?
第一个解决方案是在 IRequest 中指定 IResponse< T> 泛型的类型,如下所示:
public interface IRequest<T, U> where T : IResponse<U>
但这似乎很奇怪,因为请求应该只知道响应,而不是响应应该在 GetData() 上返回的类型。
第二个选项是创建一个非泛型接口 IResponse 并在 IRequest 的泛型类型约束中使用它,它看起来像这样:
public interface IResponse { }
public interface IResponse<T> { ... }
public interface IRequest<T> where T : IResponse
{
BaseResponse GetResponse();
}
但是,此解决方案在我的 SomeRequest 类中导致了编译错误:
public class SomeRequest : IRequest<SomeResponse>
{
public SomeResponse GetResponse() { ... }
}
错误 CS0738:SomeRequest
未实现接口成员IRequest<SomeResponse>.GetResponse()
且最佳实现候选SomeRequest.GetResponse()
返回类型SomeResponse
与接口成员返回类型不匹配IResponse
所以现在我没有想法了。任何帮助将不胜感激!