8

静的クラスと静的メソッドに疑問があります。MSDN から、「静的クラスとクラス メンバーを使用して、クラスのインスタンスを作成せずにアクセスできるデータと関数を作成する」ことがわかりました。

したがって、クラスをインスタンスに関連付けたくない場合は、それを静的にします。それが唯一の利点ですか?静的クラスのリアルタイム シナリオを教えてくれる人はいますか。

クラス(静的ではない)でしばらく、静的メソッドを見つけています。静的メソッドが実際にインスタンスメソッドよりも優れている/パフォーマンス上の利点は何ですか?

4

6 に答える 6

19

ユーティリティクラスの場合、それらは素晴らしいです。あなたが言及したように、それらはグローバルな状態に似ています。したがって、状態を持たないクラスの場合、パフォーマンス上の利点のために、クラスは静的にする必要があります。

一方、静的クラスはテストが困難です (状態が含まれている場合)。ポリモーフィズムやその他の OO の概念も失われます。

賢明に使用してください。

于 2010-02-09T08:57:47.847 に答える
6

クラスにstaticキーワードを適用することは C# 言語の規則であり、CLR にとって特別なことではありません。すべてのメンバーが静的であること、およびnewキーワードを使用して誤ってクラスのインスタンスを作成できないことを確認するだけです。

静的メソッドのメリットについては、このスレッドで説明しています。

于 2010-02-09T08:59:43.880 に答える
2

IMO 静的クラスは、変装した手続き型プログラミングです。必ずしも悪いことではありませんが、あまり OOPly ではありません。機能分解のアンチパターンに注意してください。

于 2010-02-09T09:12:59.237 に答える
1

静的クラスは、静的メソッドを定義するのに最適です。これは古典的な「ユーティリティクラス」アプローチです。ただし、静的クラスに状態を格納する(つまり、フィールドを定義する)場合は特に注意してください。マルチスレッドの世界では、静的フィールドへのアクセスを同期しない限り、これによりプログラムの動作が予測できない可能性があります。

于 2010-02-09T09:32:54.050 に答える
0

主に実行中のコードのコンテキストを導入するために使用される静的プロパティ。そして、.NET スタックのすべての部分でその確認を見つけることができます。
ASP.NET - HttpContext.Current
Threading - Thread.CurrentThread
WinForms - WindowsFormsSynchronizationContext.Current
WPF - Dispatcher
など
私にとっての静的クラスは、ユーティリティ メソッドの単なるコンテナーです。

于 2010-02-09T10:16:51.823 に答える
0

静的クラスは特定の変数をグローバル化し、コード中の処理を容易にします。したがって、基本レベルでは、静的クラスを使用することを好みます。

于 2014-02-01T05:17:40.473 に答える