4

C# を段階的に読むと、作成者は、クラスはオブジェクトの青写真にすぎず、それ自体は役に立たないと述べています。では、静的クラスが単独で動作できるようになるのはなぜでしょうか?

静的クラスはインスタンス化できず、静的メンバーを持つ 1 つの一意のインスタンスとして存在するという概念を理解しています。しかし、それは、青写真としてのクラスの比喩を少し台無しにします。この青写真のアイデアに関連して、静的クラスをどのように説明できますか?

4

6 に答える 6

9

いいえ、静的クラスは1 つの一意のインスタンスとして存在しません。静的クラスのインスタンスはありません。インスタンスではなく、型自体に関連付けられている静的メンバーのみがあります。

「インスタンスではなくクラスに関連する」という静的な意味を理解したら、それは理にかなっています、IMO。ただし、「青写真」の線に沿って、特に現実世界の類推を思い付くのは困難です。

静的メソッドの概念は、「通常の」クラスでも静的クラスとまったく同じであることに注意してください。通常のクラスでも、クラスのインスタンスを作成せずに静的メソッドを呼び出すことができます。

于 2010-10-18T10:11:16.500 に答える
4

Joel Spolsky は以前、The Law of Leaky Abstractionについてブログを書きましたが、私は「The Law of Leaky Analogy」を宣言します。

クラスを青写真と考えるのは問題ありませんが、その類推に当てはまらないものを見つけたときにあまり夢中にならないでください。いずれにせよ、クラスに静的メンバーがあることは現実です。青写真の類推が静的メンバーに対応できないのは、類推が現実ではないためです。

最終的には、プログラマーにとって何が便利かということになります。オブジェクトの特定のインスタンスに関連付けられていないメソッドを使用する方が便利な場合は、静的メソッドを使用してください。言語機能は、類推を実現するためではなく、プログラマーの生活を楽にするために存在します。

于 2010-10-18T10:16:23.630 に答える
1

あなたの例は、静的クラスが意味をなさないものです。ただし、システムにブループリントが 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 こんにちは、John S.

于 2010-12-17T12:49:47.173 に答える