接口/抽象类中的静态方法

jer*_*ith 10 .net interface-design abstract-class static-methods

首先,我理解接口或抽象类(在.NET/C#术语中)不能具有抽象静态方法的原因.我的问题更侧重于最佳设计解决方案.

我想要的是一组"辅助"类,它们都有自己的静态方法,这样如果我从第三方供应商那里得到对象A,B和C,我可以使用诸如

AHelper.RetrieveByID(string id);
AHelper.RetrieveByName(string name);
AHelper.DumpToDatabase();

由于我的AHelper,BHelper和CHelper类都基本上都有相同的方法,因此将这些方法移动到这些类随后派生的接口似乎是有意义的.但是,希望这些方法是静态的,使我无法使用通用接口或抽象类来导出所有这些方法.

我总是可以使这些方法非静态,然后首先实例化对象,如

AHelper a = new AHelper();
a.DumpToDatabase();

但是,这段代码对我来说似乎并不直观.你有什么建议?我应该完全放弃使用接口或抽象类(我现在的情况)还是可以重构这些以完成我正在寻找的设计?

rpt*_*ony 5

如果我是你,我会尽量避免任何静电.恕我直言,我总是以静态方式结束某种同步问题.话虽如此,您正在使用模板呈现通用编程的经典示例.我将在上面的一篇文章中介绍Rob Copper提供的基于模板的解决方案.


Rob*_*per 3

看了你的回复,我的想法是这样的:

  • 您可以只拥有一个静态方法,它接受类型参数并根据该类型执行预期的逻辑。
  • 您可以在抽象基中创建一个虚拟方法,并在具体类中指定 SQL。因此,它包含两者所需的所有公共代码(例如执行命令和返回对象),同时将“专业”位(例如 SQL)封装在子类中。

我更喜欢第二种选择,尽管这当然取决于你。如果您需要我详细说明,请告诉我,我很乐意编辑/更新:)