【问题标题】:If a class is blueprint for objects, what about static class?如果一个类是对象的蓝图,那么静态类呢?
【发布时间】:2011-04-26 20:47:10
【问题描述】:

逐步阅读C#,作者提到类只是对象的蓝图,本身没有用。那么,为什么静态类可以单独工作呢?

我确实理解静态类不能被实例化并作为一个具有静态成员的唯一实例存在的概念。但这有点破坏了类作为蓝图的隐喻。与这个蓝图想法相关的静态类如何解释?

【问题讨论】:

  • 它与那个比喻不太吻合。静态类就像是辅助方法的房子,它的功能完全基于输入(不需要持久状态)
  • 静态类就像那些可以对房子做任何事情但做得很糟糕的承包商。如果你真的需要,就使用它们。

标签: c# .net class static-classes


【解决方案1】:

不,静态类作为一个唯一的实例存在。静态类有没有个实例。只有静态成员,它们与类型本身相关联,而不是任何实例。

一旦您了解静态含义“与类相关,而不是实例”的概念,它就有意义了,IMO。但是,很难根据“蓝图”路线提出特别真实的类比。

值得注意的是,静态方法的概念对于“普通”类与静态类完全相同:即使是普通类,您也可以调用静态方法而无需创建该类的实例。

【讨论】:

  • 是的,我只是好奇如何将其“适应”到这个类比中。
  • 还有一件事——有人说使用静态类真的很糟糕吗?仅在真正需要时等?
  • @Ptr:嗯,有时你不需要处理自然状态,也不需要多态行为(即不值得实现接口或类似的东西)。一个自然的例子是数学函数:sin、cos 等。然而,过度使用静态类当然值得小心。他们不适合“纯粹的”面向对象的工作方式……但在某些情况下他们是务实的。
【解决方案2】:

Joel Spolsky 曾经写过关于 The Law of Leaky Abstraction 的博客,我将宣布“泄漏类比定律”。

所有类比都被打破了,虽然将课程视为蓝图很好,但当您看到不符合该类比的事物时不要太挂念。无论如何,那个类有静态成员是现实;蓝图类比不能容纳静态成员,是因为类比不是现实。

最后,一切都取决于程序员的方便;如果使用未附加到对象的特定实例的方法很方便,则使用静态方法。语言特性的存在是为了让程序员的生活更轻松,而不是为了满足类比。

【讨论】:

    【解决方案3】:

    你的例子是一个静态类没有意义的例子。但是,如果系统中只有一个蓝图曾经,那么您可以争辩说静态类是可以的。

    【讨论】:

      【解决方案4】:

      可以将静态类视为不需要实例的方法的存储库。 它充当您的课程的一种服务提供者。

      例如,扩展方法都定义在静态类中。

      【讨论】:

        【解决方案5】:

        正如 Head First C# 书中提到的,“静态”这个词并不是那么直观,很多人确实对含义和术语感到困惑。

        【讨论】:

          【解决方案6】:

          “如果您将类视为用于创建对象的蓝图,那么您可以将静态字段和方法视为蓝图本身的一部分。”当时,类比作千篇一律的是教授面向对象编程的类比。我认为class as blueprint 是一个很大的改进:)

          问候, 杰夫(日航)

          附:嗨,约翰 S。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2023-04-09
            • 2014-12-23
            • 1970-01-01
            • 2012-08-19
            • 1970-01-01
            • 1970-01-01
            • 2012-06-08
            • 1970-01-01
            相关资源
            最近更新 更多