オブジェクトに何が起こっても機能に変化はないということは何ですか?関数はどのように変化しますか?静的変数、はい、しかし関数ですか?
「静的なデータと関数の代わりに、オブジェクトに何が起きても変化しない」と言うと、静的なデータと関数は影響を与えず、影響を受けない、オブジェクトの特定のインスタンスに変更します。この内のクラスのように与え例えば
、...
public class Car
{
int m_speed;
public int Speed { set { m_speed = value; } }
}
...いくつかの静的データと静的メソッドは、このようなことかもしれません...
public class Car
{
int m_speed;
public int Speed { set { m_speed = Math.Max(value, s_maxSpeed; } }
//static data and static method
static int s_maxSpeed;
public static void SetMaxSpeed(int maxSpeed) { s_maxSpeed = maxSpeed; }
}
...たとえば、s_maxSpeed
の値が存在し、Car
インスタンスが存在するかどうかにかかわらず、静的なSetMaxSpeed
メソッドを呼び出すことができます。
"オブジェクトアイデンティティ"とは何ですか?それは、例えば、家のオブジェクトの特定の家ですか? (だから我々は特別に選ばれた家を扱う)。だから静的なクラスはどの家のオブジェクトでも動作しませんでしたか?
「オブジェクトアイデンティティ」と「オブジェクトインスタンス」は同じことを意味します。それらは同義語です。 object.ReferenceEquals
メソッドを使用すると、オブジェクトのアイデンティティーをテストできます。つまり、2つのオブジェクト参照が同じ(同一の)インスタンス/アイデンティティを指しているかどうかを確認できます。
私がインスタンス状態で動作しない場合は、常に静的クラスを使用する必要がありますか?
すべて(非インスタンス状態であっても)は何らかの種類(たとえば、、static)クラスです。
インスタンス状態で動作する静的クラスとインスタンスクラスの違いは何ですか?私が考えることができるのは、静的クラスは1インスタンスのみであるため、1インスタンスはクラスがインスタンス状態(スレッド同期がある場合)で動作した場合、多くの呼び出しがキューに入れられることを意味します。
1つの違いは、静的データは常に存在しますが、インスタンスデータはインスタンスが作成される前または作成されるまで存在しないことです。静的クラスはシングルトンオブジェクトに似ているのは間違いありません。
しかし、スレッドの同期が必要な場合でも、「同期」は自動的には発生しません(静的であるかシングルトンであるかにかかわらず)。いずれの場合も、明示的に実装する必要があります(例:lock
キーワード等)。
長い間私を助けるために、1)をいつ使用するかの例がもうありますか?だから、静的なクラス/メソッドは、車のインスタンスに関連しないものを変更することかもしれません。 ポイント2)十分です。 – dotnetdev
静的メソッドはインスタンス化されたオブジェクトに属しません。したがって、呼び出されたときに渡されたパラメータは変更されません。特定の型の新しいオブジェクトをインスタンス化する静的メソッドをクラスに持たせることができます。 HttpWebRequestオブジェクトでこのような振る舞いを見ることはできませんが、HttpWebRequest.Create/CreateDefaultメソッドを使用してそのクラスのインスタンスを作成する必要があります。 –