【发布时间】:2020-10-02 08:30:00
【问题描述】:
抱歉,如果之前已经问过这个问题。我是这门语言的新手,真的不知道如何正确表达我的问题。 我目前必须重写一个使用不再维护的 C# 库的应用程序。有一个新的 API 可以做同样的事情,但使用不同的数据结构。 因为我必须同时支持它们,所以我的想法是创建一个通用接口来访问所选 API 的方法。 我正在考虑执行以下操作
public interface IAPIService<T> {
List<T> GetEntries(...);
//...
}
public class API1Service: IAPIService<APIType1> {...};
public class API2Service: IAPIService<APIType2> {...};
在我的主类中使用类似
IAPIService<?????> api;
if (API1) { api = new API1Service(); }
else { api = new API2Service(); }
但是,由于我已经输入了它们,并且直到运行时我才知道要使用哪种类型,所以我被卡住了。
【问题讨论】:
-
APIType1和APIType2有什么共同点吗? -
您正在向客户端泄露实现细节。如果您想隐藏您实际使用的 API,那么客户端无法告诉您。这也意味着,如果存在特定于各个 API 的数据结构,您也需要对它们进行抽象/规范化。
-
决定使用哪个 API 的标准是什么?
-
我猜配置文件中的条目或命令行参数就足够了。
-
看来您需要为返回类型编写一个包装器。究竟是什么意思:“它们只是在语义上相等”?
标签: c# .net generics interface