【问题标题】:Is there a way to reuse code in Static classes since Inheritance is impossible? [closed]由于继承是不可能的,有没有办法在静态类中重用代码? [关闭]
【发布时间】:2013-04-09 17:04:53
【问题描述】:

有时我的静态类型实际上应该是静态的,但在极少数情况下,我需要重用它们的一些代码(几个方法)。我可以创建一个接口或另一个基本抽象类并解决几个静态类的问题,这些静态类都需要重写相同的方法和成员,但稍作修改。但它仍然需要我复制粘贴大部分代码,我将无法再将它们标记为静态。

【问题讨论】:

  • 如果你需要重用那些静态方法,你不能......你知道......调用它们吗?
  • 如果你需要继承,为什么要静态?
  • 可以隐藏构造函数,则类对象不能被开发者创建。
  • 请提供一些示例代码。我不确定你在问什么,因为任何时候你调用一个函数(甚至是静态类上的静态函数),你本质上都是在“重用”该代码。

标签: c# class static overriding reusability


【解决方案1】:

您可以通过构建单例类来解决这个问题。然后,他们可以利用基类 abstract 以及任何必要的继承层次结构,但他们仍然可以拥有仅在必要时利用私有实例的静态方法。

查看 Jon Skeet 的 blog on Singleton's,以便正确构建自己的。

【讨论】:

  • @DavidDiamond,您是否清楚地了解您在应用程序的整个生命周期内只创建 一个实例
  • @DavidDiamond,但请记住,任何不利用继承层次结构的东西在使用反射时都不需要利用 Instance 属性。并非类中的所有内容都必须是实例成员。这就是我建议它的原因。事实上,您可以使用静态成员屏蔽所有实例操作。考虑一个静态方法,然后在内部只获取Instance.InstanceMethodName
  • @DavidDiamond,我不得不问,你对Reflection 在实例上的表现比在类型上表现更差的担忧,它是建立在某种基准上的吗?我已经构建了几乎没有静态代码的应用程序——包括 UX 在内的整个应用程序都被解释了——我们没有发现任何区别。 Reflection 仍然需要对类型执行查找。在内存中设置一个值,不管是静态的还是实例的,都是一样的操作。
猜你喜欢
  • 1970-01-01
  • 2016-09-18
  • 2017-01-19
  • 1970-01-01
  • 1970-01-01
  • 2010-11-15
  • 2015-04-27
  • 2011-01-14
  • 1970-01-01
相关资源
最近更新 更多