【发布时间】:2013-02-10 13:20:35
【问题描述】:
我正在尝试构建一个应用程序来处理对 2 或 3 个相关 API 的大量 API 请求。我的一般策略是拥有一个基类ApiRequest,它具有:
List<Parameter> Parameters
Uri CombinedUri
string Results
string _Host
和方法:
CombineUri() //combines the _Host and parameters into full Uri
MakeRequest() //makes the request and stores Results
然后我会将该基类继承到许多不同的 Api 调用中,并在特定于该 Api 调用的函数中实现函数。
我遇到的问题是我在基类构造函数中调用了CombineUri(),但它要求_Host 已经设置。但是,我希望 _Host 成为每个子类中的常量,因为它特定于每个不同的 Api 调用。我不想记住从每个派生类的构造函数中调用CombineUri。
任何解决该问题的想法将不胜感激。此外,如果您有完全不同的设计理念来实现 Api 调用的基础,我会全力以赴。我不确定我的方法是不是最好的。
谢谢。
我的解决方案:
我实现了 John 和 Colin Pear 的想法。
我将基础ApiRequest 更改为抽象类,并将CombineUri() 方法移动到MakeRequest() 方法中。
我还更进一步,将ApiRequest 更改为泛型类,并将_Host 更改为static string。这样,每个子类都有子类ApiRequest<*subclassname*>。由于泛型的属性,特定子类的每个对象都将共享一个静态的_Host。
【问题讨论】:
-
只需将您想要的特定主机传递给超类构造函数即可。
-
我希望避免这种情况,因为我从基类派生每个单独的 Api 调用,并且觉得在我的其他代码中放置这些常量 Api 主机字符串会很奇怪。想法?
-
我想你可能想要一个抽象基类。
-
@ColinPear 我认为您可能是对的。但是,我将如何在必须在子类中的抽象定义中实现静态主机字符串。没有 setter 的抽象属性会是最好的方法吗?
-
将其设为静态的目的是什么?您的基类变量和方法将可用于从它继承的所有类。如果你想让它只读,你可以这样做。
标签: c# api inheritance