3

静的クラスに関するいくつかの質問。これのいくつかは私がしばらく前に読んだものからのものなので、私はどんな神話も払拭したいと思います。

クラスのインスタンスが1つ必要な場合、たとえば1つの会社(つまり会社の詳細)を表す場合、クラスは静的である可能性があることを知っています。複数の同一インスタンスが必要なのはなぜですか?

でも:

1)クラスのメソッド(つまり、タイプまたはそのインスタンスクラス/インターフェイスなど)、インスタンス、またはその他のパラメータの選択は、クラスを静的にするかどうかの決定に影響を与える可能性がありますか?したがって、インスタンスオブジェクトをパラメーターとして提供する場合(たとえば、myMethod(new Car()))、これはクラスを静的にするかどうかに影響を与える可能性がありますか?私はこれができることをしばらく前に読んだので、私は神話を払拭しようとしています。

2)静的クラスが別のクラスの状態を使用しない場合、これはクラスを静的にすることに関係がありますか?

IEはフィールドを含む静的クラスであり、そのフィールドはクラスの独自のメソッド内で使用されます。

また、ここで静的に関する投稿を読みました。メンバーは、クラスに「繰り返し可能な」機能が含まれていない場合、静的にすることができると述べました。この文脈で再現性とはどういう意味ですか?

ありがとう

4

4 に答える 4

2
  1. いいえ、パラメータのタイプは、静的なクラスとはまったく関係ありません。
  2. いいえ、状態を消費する(または消費しない)メソッドは、メソッドを静的にする必要があるかどうかには関係ありません。
  3. 「繰り返し可能」とは、サブクラスとメソッドのオーバーライドを伴う潜在的にポリモーフィックであることを意味しているのではないかと思います。

つまり、メソッド(またはクラス)がそれ自体のインスタンスで状態を消費または変更しない場合は、メソッド(またはクラス)を静的にします。this言い換えると、 (明示的または暗黙的に)使用しない場合は、おそらく静的にする必要があります。

于 2012-06-19T22:58:55.333 に答える
2

オブジェクトを静的にしない3つの理由:

オブジェクトは、新しく初期化された状態に複数回設定する必要があります。再初期化を行うメソッドを作成することもできますが、静的クラスはコンストラクターを持つことができますが(静的クラスのメンバーへの最初の参照がクラスのロードをトリガーするまで呼び出されないと思います)、できないことに注意してください。それをランタイムと呼びます。

ユーザーが「作業」コピーの編集をキャンセルしたときに元に戻すオブジェクトの「memento」コピーが必要になる場合があります。

静的オブジェクトは、複数のインスタンス化されたオブジェクトから同時にアクセスされる場合があります。静的オブジェクトを使用して、ページの読み込み処理中にユーザーと状態のデータを格納するASP.NET Webアプリケーションで問題が発生しました。これらのデータは、異なるユーザーからの同時ページ要求間で共有されていました。

于 2012-06-20T00:08:00.080 に答える
1

1)できません。静的メソッドとインスタンスメソッドは、引数の型に関してまったく同じシグネチャを持つことができます。

2)そうではありません。

繰り返し可能:これはおそらく、クラスのインスタンスに格納されている状態を指します。特定のプログラム状態(スコアなど)のストレージが1回だけ必要な場合は、静的フィールドを持つ静的クラスを使用できます。その状態が数回必要な場合(たとえば、プレーヤーごとに別のスコア)、インスタンスフィールドを使用します。これは、クラスのインスタンスを必要な数(この場合はプレーヤーの数だけ)作成できるためです。

于 2012-06-19T22:59:05.323 に答える
1

私の意見では、簡単にまとめると、クラスのすべてのメンバーが静的であることが理にかなっている場合は、クラスを静的としてマークする必要があります。ここでは特に複雑なことは何も起こっていません。それはそれと同じくらい簡単です。

于 2012-06-19T23:05:35.487 に答える