4

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

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

4

6 回答 6

9

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

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

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

于 2010-10-18T10:11:16.500 回答
4

Joel Spolsky 曾经写过一篇关于泄漏抽象法则的博客,我将宣布“泄漏类比法则”。

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

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

于 2010-10-18T10:16:23.630 回答
1

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

于 2010-10-18T10:11:40.790 回答
1

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

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

于 2010-10-18T10:11:50.280 回答
1

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

于 2010-10-18T11:16:26.947 回答
0

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

问候,杰夫(JAL)

PS嗨约翰S。

于 2010-12-17T12:49:47.173 回答