1. ホーム
  2. c#

[解決済み] メソッドは静的化できるが、そうすべきなのか?

2022-03-24 07:14:30

質問

ReSharperは、ASP.NETページごとに静的化できる複数の関数を指摘するのが好きです。それらを静的化した場合、役に立つのでしょうか?それらを静的にし、ユーティリティクラスに移動させるべきでしょうか?

解決方法は?

静的メソッドとインスタンスメソッド
静的メンバとインスタンスメンバ の「C# 言語仕様書」でその違いが説明されています。一般に、静的メソッドはインスタンスメソッドに比べて非常に小さな性能向上をもたらしますが、それはやや極端な状況においてのみです(詳しくは この回答 を参照してください)。

FxCopまたはCode AnalysisのルールCA1822の状態。

メンバを static にした後、コンパイラはこれらのメンバに対して非仮想呼び出しサイトを生成します。 実行時に、各呼び出しに対して現在のオブジェクトポインタが 非NULL これによって、以下のような性能向上が期待できます。 パフォーマンス重視のコード 場合によっては 現在のオブジェクトのインスタンスは、正しさの問題を表しています。

ユーティリティクラス
設計上、理にかなっていない限り、ユーティリティクラスに移動させるべきではありません。静的メソッドが特定の型に関連している場合、たとえば ToRadians(double degrees) メソッドが角度を表すクラスに関連している場合、そのメソッドがその型の静的メンバとして存在することは理にかなっています(注:これはデモンストレーションのために複雑な例になっています)。