ReSharper 2026.1 Help

コードインスペクション: メンバーは静的(共有)にできます(非公開以外のアクセス権)

以下のメソッド Print を考えてみましょう。

public class Foo { public void Test() { Print("John"); } public void Print(string name) { Console.WriteLine("Hello, {0}!", name); } }
Public Class Foo Public Sub Test() Print("John") End Sub Public Sub Print(name As String) Console.WriteLine("Hello, {0}!", name) End Sub End Class

ソリューション全体の分析が有効化されている場合、ReSharper は Print にインスタンスでの使用がなく、静的にできることを提案します。 しかし、なぜでしょうか? 実際には、特定の状況下で静的メンバーは少しだけパフォーマンス向上をもたらします。

Microsoft のドキュメントはこれについて何を言いたいのですか?

- インスタンスデータにアクセスせず、インスタンスメソッドを呼び出さないメンバーは静的(Visual Basic では共有)としてマークできます。 メソッドを静的にマークすると、コンパイラーはこれらのメンバーへの非仮想呼び出しサイトを生成します。 非仮想呼び出しサイトを生成することで、各呼び出し時に現在のオブジェクトポインターが null でないことを確認するランタイムでのチェックを防ぎます。 これにより、パフォーマンス重視のコードでは測定可能なパフォーマンス向上が得られます。 場合によっては、現在のオブジェクトインスタンスへアクセスできないことが正しさの問題になることがあります。

ソリューション全体のインスペクションを機能させるには、次の少なくとも 1 つを有効にする必要があります。

  • 簡略化されたグローバル使用状況チェック: ReSharper オプション の コードインスペクション | 設定 ページで ソリューション全体の分析がオフの場合に、未使用の非プライベートタイプメンバーを表示する を選択します Alt+R、O

  • ソリューション全体の分析: ReSharper オプション の コードインスペクション | 設定 ページで ソリューション全体の分析を有効化する を選択します Alt+R、O

報告されたメンバーがソリューション内で直接使用されていない場合でも、リフレクションなどによって間接的に使用される場合や、単にパブリック API として設計されている場合もあります。 これらのすべてのケースでは、次のいずれかの方法でメンバーの使用状況チェックインスペクションを 抑制する必要があります。

  • 推奨される方法は、暗黙的に使用されるメンバーを コードアノテーション属性 で装飾することです。 この目的には [UsedImplicitly][PublicAPI] の属性があり、これらは機能的に似ていますが、メンバーが実際にどのように使われているかをあなたやチームメイトが理解するのに役立ちます。

  • また、カスタム属性を使用してインスペクションの使用状況を抑制することもできます。 これを行うには、その属性の定義に [MeansImplicitUse] 属性を付けます。

  • そして最後に、特定の使用チェックインスペクションを、 抑制コメントまたは抑制属性を持つ他のコードインスペクションと同様に抑制することができます。

2026 年 6 月 12 日