3

有几个问题是关于静态类的。其中一些来自我不久前读过的东西,所以我想消除任何神话。

我知道如果我需要一个类的实例,例如代表一家公司(即公司详细信息),该类可以是静态的。为什么我需要多个相同的实例?

然而:

1) 类的方法中参数的选择(即类型或它是否是实例类/接口等),实例或其他,是否会影响使类成为静态的决定?因此,如果我提供一个实例对象作为参数(例如 myMethod(new Car()) )或其他任何东西,这会对是否使类变为静态有任何影响吗?不久前我读到这可以,所以我试图消除一个神话。

2)如果静态类不使用另一个类的状态,这对使类成为静态有什么关系吗?

IE 包含一个字段的静态类,并且该字段在类的 ownn 方法中使用。

我还在这里阅读了一篇关于静态的帖子,一位成员说,如果该类不包含“可重复”功能,则可以将其设为静态。在这种情况下,可重复意味着什么?

谢谢

4

4 回答 4

2
  1. 不,参数的类型与静态类完全无关。
  2. 不,方法使用状态(或不使用)与方法是否应该是静态的无关。
  3. 我怀疑“可重复”意味着具有子类和方法覆盖的潜在多态性。

总之,如果方法(或类)永远不会消耗或修改其自身实例的状态,则将其设为静态。换句话说,如果它不使用this(无论是明确的还是暗示的),那么它可能应该是静态的。

于 2012-06-19T22:58:55.333 回答
2

使对象不是静态的三个原因:

您的对象需要多次设置为新初始化的状态。您可以编写一个方法来进行重新初始化,但请注意,虽然静态类可以有一个构造函数(我相信直到第一次引用静态类的成员触发要加载的类时才会调用它),但您不能称之为运行时。

当用户取消编辑“工作”副本时,您可能希望拥有对象的“纪念品”副本以撤消。

可以同时从多个实例化对象访问静态对象。我从 ASP.NET Web 应用程序中看到了问题,其中静态对象用于在页面加载处理期间存储用户和状态数据,这些数据将在来自不同用户的同时页面请求之间共享。

于 2012-06-20T00:08:00.080 回答
1

1) It cannot. Static methods and instance methods can have the very same signatures, concerning argument types.

2) It does not.

Repeatable: This probably refers to the state stored in instances of the class. If you need a storage for a given program state (say, a score) only once, you can use a static class with static fields. If you need that state several times (say, another score for each player), you use instance fields because you can then create as many instances of your class as you need (in this case, as many instances as there are players).

于 2012-06-19T22:59:05.323 回答
1

我认为简单的总结:如果类的所有成员都是静态的有意义,那么您应该将该类标记为静态。这里没有什么复杂的事情,就是这么简单。

于 2012-06-19T23:05:35.487 回答