【问题标题】:How to force static class to implement specific methods?如何强制静态类实现特定方法?
【发布时间】:2011-03-25 12:38:49
【问题描述】:

我需要创建一组静态类,它们都需要实现相同的方法。我想想办法强迫他们这样做。

我知道静态类不能派生 System.Object 以外的任何东西。我应该为此使用非静态方法吗?可以,但是这个类的所有方法都不会使用实例属性...

我最好的办法是我应该使用单例。然后我会使用一个实例,但至少我不会在每次需要使用方法时都强制实例化该类。

您建议的替代方案是什么?

编辑:

我不会实现这些方法。我需要强制其他开发人员实现具有特定签名的特定方法。每个班级的所有签名都是相同的。就是这样。

假设您有一个静态类,可以从您办公室的数据库中获取记录。你有几种方法可以做到这一点。由于这些方法都不共享变量,因此它们被标记为静态,类也是如此。

现在,您和您团队中的其他开发人员必须对您无法控制的其他数据库甚至 API 执行相同的操作,这并不重要。您想强迫您的同事使用完全相同的方法和相同的签名来实现所有这些类。

您的 cmets 总是受欢迎的,但现在我只想找到最接近的方法。

我可以使用一个所有其他人都可以继承的抽象类。但由于这些方法不共享任何内容,我不希望每次需要它们时都实例化该类。

这就是我提到使用单例模式的原因。我不应该这样做吗?

【问题讨论】:

  • 为什么需要静态类来实现特定的方法?您通常需要特定方法存在的原因是启用多态性,即能够传递可以被相同处理的不同类型对象的实例。这样的概念对静态类没有意义,因为没有静态类的实例。
  • 您能解释一下为什么要让静态类都具有相同的方法,这可能有助于其他人提供更多建议。 (目前我想不出为什么有人会想要这样做!)
  • 您的问题太模糊了,并且与接口的定义有关。考虑重新考虑您的方法或提供一个示例场景来帮助您详细说明您正在尝试做的事情。
  • 我明白你们在说什么。原因在问题的编辑部分。谢谢

标签: c# static-methods static-members static-classes


【解决方案1】:

如果我没看错你的问题,除非你的方法有很多重载,否则单例将无法工作。

当我们谈论接口和基类等时,如果您可以控制代码,是否有理由不能只创建一组实现所需方法的类?当然,您需要记录您所做的事情以及原因,但除了坚持“惯例”之外,您还有理由这样做吗?

如果您使用的是静态类,它不继承 System.Object 之外的任何东西,并且不实现任何接口,那么无论如何您都不能互换地调用它们。

编辑 根据您的编辑,您似乎正在尝试通过代码本身执行应该是编码策略的内容。每个开发车间都有自己遵循的政策、程序和标准,从文档到项目布局,再到方法签名,无所不包。我目前的客户对方法签名非常严格,因为我们在 BizTalk 之间传递了很多东西,并且仅仅因为有人不想遵循团队其他成员正在使用的模式而更改 BizTalk 解决方案是一件痛苦的事。

如果是您的团队成员编写这些静态类和静态方法,我看不出有什么原因(除了可能的办公室政治)您不能通过实施策略来做到这一点。

如果您必须通过代码执行此操作,我认为您会被接口和实例方法所困。

如果您愿意,一旦创建了这些实例方法,您就可以将静态帮助类编写为包装器(因此您个人不必每次都实例化对象),但我不知道那会得到你什么都行。

【讨论】:

  • 我之所以要这样做是因为我不会实现所有有问题的类。我不需要任何重载,因为这些方法接受一个变量,该变量是一个类的实例,其属性是允许的选项。你的最后一段是什么意思?我不能互换地调用静态类中的方法吗?呼叫 1、2,然后是 3,然后是 2?我在谷歌翻译器中搜索了那个词,但不确定你的意思。阅读问题的编辑部分。谢谢!
  • @Fabio Milherio: 如果我有 static class Foo 方法 DoStuff()static class Bar 方法 DoStuff 我仍然必须指定我需要哪个类:Foo.DoStuff()Bar.DoStuff()
猜你喜欢
  • 1970-01-01
  • 2012-11-14
  • 2013-08-02
  • 2010-12-26
  • 2010-12-18
  • 2013-10-31
  • 2015-02-16
  • 2018-09-17
  • 1970-01-01
相关资源
最近更新 更多