1

简短的问题

据我所知,大多数 OOP 语言都不能继承静态字段。(C++、Java、C#)
另一方面,OOP 说你不应该重复代码。

  • OOP 语言中是否有一种通用的方式,类似于“静态字段继承”?
  • 您知道解决问题的更简单、特定于语言的独特方法吗?
  • 有没有“集成”的语言?(我的意思是像一个关键字。)

(无论如何,我知道静态字段的基本意图,我只是想更深入并避免任何重复。)

我的具体问题

我想制作一个框架(C# 或 Java),并使其更容易扩展。因此,我希望尽快将有关继承类的约束和信息放入基类中。

我知道,每个继承的类都必须有自己的静态字段。(我想为每个子类创建一个对象计数器。)
因此,制作“静态字段继承”之类的东西似乎是合乎逻辑的——子类需要静态字段,而不是基类。
我见过一些棘手的解决方案(例如:在 C# 中,在C# 抽象类静态字段继承中使用泛型),但我不敢相信没有更简单的方法。
如果没有更简单的方法,请解释我应该如何找到使用泛型?
在这种情况下,我应该如何看待泛型?我应该将哪些问题与他们联系起来?
(在学校里我们学它只是为了“避免代码重复”,没有强调静态字段分离!在这种情况下,在我看来,泛型同时是类和实例,但我没有找到任何可以理解的逻辑方法呢。)

4

3 回答 3

3

@Pezo,您误解了静态字段和泛型。
静态字段是不可继承的,因为它们可以在没有实例的情况下访问,并且利用继承的概念仅适用于对象,不适用于类。

除非您有从给定基类派生的类的实例,否则您不能使用从该基类继承的 [非静态] 字段。但是你总是可以使用来自任何类的静态字段,无论你是否有它的实例,或者其他任何东西的实例。它们可以被类的每个实例访问,也可以在没有任何类的任何实例的情况下访问。

至于泛型,泛型和静态字段是不同的主题,几乎没有共同点。泛型允许您为非特定类型的类(或方法)编写定义或模式,以便稍后您可以通过指定您希望它使用的类型来使用它来创建实际的具体类。它可以包含静态和非静态字段以及属性和方法,就像 on-generic 一样。

于 2013-06-04T12:32:15.250 回答
3

您正试图将简单的机制(静态字段)用于更复杂的事情。不要这样做。似乎您固定在使用静态字段为每个后代类保存一些类似单例的信息同时以某种方式统一对它的访问的想法,但这是一种完全错误的方法。

忘记静态字段,并建立一个单独的设施来保存每个类所需的信息。它本质上可以是Dictionary<Type, Something>某个地方的静态场,或者更复杂的东西。很大程度上取决于您的用例。然后您将看到您不会重复自己,并获得更多好的功能。

您还应该阅读有关Inversion of ControlDependency Injection的内容。许多 IoC 框架(例如NinjectStructure Map仅举几例)可能已经成功地解决了您想要实现的目标。

旁注:考虑寻找合适的框架而不是构建自己的框架。

于 2013-06-04T20:10:06.907 回答
0

OOP 语言中是否有一种通用的方式,类似于“静态字段继承”?

不。

于 2019-06-21T21:18:33.587 回答