静的メソッドははるかに高速であり、使用するメモリも大幅に少なくなります。少しだけ速いという誤解があります。ループにしない限り、少し速くなります。ところで、一部のループは小さく見えますが、ループを含むメソッド呼び出しも別のループであるため、実際にはそうではありません。レンダリング機能を実行するコードの違いを見分けることができます。残念ながら、多くの場合、メモリがはるかに少ないことが当てはまります。インスタンスを使用すると、姉妹メソッドと簡単に情報を共有できます。静的メソッドは、必要なときに情報を要求します。
しかし、車の運転と同じように、スピードには責任が伴います。通常、静的メソッドには、対応するインスタンスよりも多くのパラメーターがあります。インスタンスが共有変数のキャッシュを処理するため、インスタンス メソッドはより見栄えがよくなります。
ShapeUtils.DrawCircle(stroke, pen, origin, radius);
ShapeUtils.DrawSquare(stroke, pen, x, y, width, length);
VS
ShapeUtils utils = new ShapeUtils(stroke,pen);
util.DrawCircle(origin,radius);
util.DrawSquare(x,y,width,length);
この場合、ほとんどの場合、インスタンス変数がすべてのメソッドで使用されるときはいつでも、インスタンス メソッドは非常に価値があります。インスタンスは状態についてではなく、共有についてのものですが、共通状態は共有の自然な形であり、同じではありません。一般的な経験則は次のとおりです。メソッドが他のメソッドと密接に結合されている場合 --- お互いに愛し合っているため、一方が呼び出されたときにもう一方も呼び出す必要があり、おそらく同じカップの水を共有します --ー、インスタンス化すればいいのに。静的メソッドをインスタンス メソッドに変換することは、それほど難しくありません。共有パラメータを取得してインスタンス変数として配置するだけです。その逆は難しいです。
または、静的メソッドをブリッジするプロキシ クラスを作成することもできます。理論上は効率が悪いように見えるかもしれませんが、実際にやってみると話は別です。これは、DrawSquare を 1 回 (またはループで) 呼び出す必要がある場合は常に、静的メソッドに直接アクセスするためです。ただし、DrawCircle と一緒に何度も使用する場合は、インスタンス プロキシを使用することになります。例として、System.IO クラスの FileInfo (インスタンス) と File (静的) があります。
静的メソッドはテスト可能です。実際、インスタンス ワンスよりもさらにテスト可能です。メソッド GetSum(x,y) は、単体テストだけでなく、負荷テスト、統合テスト、および使用テストにも非常に適しています。インスタンス メソッドは単体テストには適していますが、他のすべてのテスト (これは単体テストよりも重要です) にとってはひどいものです。そのため、最近非常に多くのバグが発生しています。すべてのメソッドをテスト不可能にするのは、(Sender s、EventArgs e) のような意味をなさないパラメーターや、DateTime.Now のようなグローバル状態です。実際、静的メソッドはテスト容易性に非常に優れているため、新しい Linux ディストリビューションの C コードに見られるバグは、平均的な OO プログラマーよりも少なくなります (彼は s*** でいっぱいです)。