ReSharper 2024.3 ヘルプ

メソッドを非静的にするリファクタリング

このリファクタリングにより、静的メソッドを元の型または別の型のインスタンスメソッドに変換できます。新しいインスタンスメソッドのターゲット型は、メソッドにパラメーターとして渡される型のいずれかから選択できます。このメソッドの使用方法、実装方法、オーバーライドはすべて自動的に更新されます。

このリファクタリングは、現在のソリューションで定義されている型のパラメーターを少なくとも 1 つ持つ静的メソッドにのみ適用できます。

以下の例では、このリファクタリングを使用して、Info クラスの静的メソッド Merge を同じ型のインスタンスメソッドに変換します。

class Info { string Id { get; set; } string Name { get; set; } static Info Merge(Info i1, Info i2) { return new Info { Id = i1.Id + i2.Id, Name = i1.Name + i2.Name }; } void Test() { var i1 = new Info() { Id = "123", Name = "AA" }; var i2 = new Info() { Id = "456", Name = "BB" }; var merged = Info.Merge(i1, i2); } }
class Info { string Id { get; set; } string Name { get; set; } Info Merge(Info i2) { return new Info { Id = Id + i2.Id, Name = Name + i2.Name }; } void Test() { var i1 = new Info() { Id = "123", Name = "AA" }; var i2 = new Info() { Id = "456", Name = "BB" }; var merged = i1.Merge(i2); } }

次の例では、Info オブジェクトで動作する静的メソッド Merge がクラス Service で定義されています。リファクタリングを使用して、Merge を論理的に属するクラス Info のインスタンスメソッドにします。

class Service { public static Info Merge(Info i1, Info i2) { return new Info { Id = i1.Id + i2.Id, Name = i1.Name + i2.Name }; } } class Info { public string Id { get; set; } public string Name { get; set; } void Test() { var info1 = new Info() { Id = "123", Name = "AA" }; var info2 = new Info() { Id = "456", Name = "BB" }; var merged = Service.Merge(info1, info2); } }
class Service { } class Info { public string Id { get; set; } public string Name { get; set; } void Test() { var info1 = new Info() { Id = "123", Name = "AA" }; var info2 = new Info() { Id = "456", Name = "BB" }; var merged = info1.Merge(info2); } public Info Merge(Info i2) { return new Info { Id = Id + i2.Id, Name = Name + i2.Name }; } }

静的メソッドをインスタンスメソッドに変換する

  1. キャレットをエディターの静的メソッドの宣言または使用箇所に置くか、ファイル構造ウィンドウウィンドウで選択します。

  2. 以下のいずれか 1 つを実行します:

    • Control+Shift+R を押し、メソッドを非静的にするを選択します。

    • 右クリックして、コンテキストメニューからリファクタリング | メソッドを非静的にするを選択します。

    • メインメニューから ReSharper | リファクタリング | メソッドを非 static にする…を選択します。

    メソッドを非静的にするダイアログが開きます。

  3. リストからパラメーターを選択します。このメソッドは、パラメーター型のインスタンスメソッドに変換されます。

  4. リファクタリングを適用するには、次へをクリックします。

  5. 競合が見つからない場合、ReSharper はすぐにリファクタリングを実行します。それ以外の場合は、競合を解決するように求められます。

ReSharper: Make method non-static refactoring

この機能は、次の言語とテクノロジーでサポートされています。

ここで説明する手順と例では、C# の機能の使用について説明します。他の言語の詳細については、言語およびフレームワークセクションの対応するトピックを参照してください。

関連ページ:

メソッド / プロパティを静的にするリファクタリング

このリファクタリングでは、インスタンスメソッドまたはプロパティを静的インスタンスメソッドまたはプロパティに変換できます。すべての呼び出し、実装、上書きが自動的に修正されます。変換されたインスタンスメソッドがインスタンスメンバーを使用する場合、ReSharper は、これらの使用箇所を適用するを表す必要なパラメーターを追加できます。変換されたインスタンスプロパティがインスタンスメンバーを使用する場合、リファクタリングは使用できません。以下の例では、このリファクタリングを使用して、クラスのインスタン...

インスタンスメソッドの移動リファクタリング

このリファクタリングにより、インスタンス(非静的)メソッドを別の型に移動できます。静的メンバーを移動するとは対照的に、インスタンスメソッドはどの型にも移動できません。潜在的なターゲット型のリストには、メソッドパラメーターの型と現在の型のフィールドの型が含まれます。メソッドが他のクラスメンバーを使用する場合、リファクタリングはソースクラスをパラメーターとして渡します。また、必要に応じて、非パブリックメンバーのアクセス権を変更し、フィールドをパブリックプロパティにカプセル化します。メソッドのすべての...

構造別にファイルを移動する

ファイル構造ウィンドウ:ReSharper では、ファイル構造ウィンドウを使用して現在のドキュメントの構造を移動でき、大きなファイルでのナビゲーションが大幅に簡素化されます。ウィンドウはエディターと同期されます。別のエディタータブに切り替えると、ウィンドウには対応するファイルの構造が表示されます。ファイル構造ウィンドウを開いて使用するを押すか、メインメニューからを選択します。あるいは、を押して、ポップアップでコマンド名を入力して、そこで選択することもできます。現在のドキュメントの内容はツリー

リファクタリングの競合を解決する

ReSharper のすべてのリファクタリングはソリューション全体に適用されるため、多くのファイルが影響を受ける可能性があり、一部の変更は既存のコードと競合する可能性があります。競合がある場合、ReSharper はそれらを検出し、リファクタリングウィザードの最後のページに競合のリストを表示します。例: 安全な削除リファクタリングをメソッドに適用するときに表示されるいくつかの競合を次に示します。競合には 2 つの型があります。コンパイルを中断することなく削除できる使用箇所は、アイコンでマークされて...

さまざまな言語の ReSharper 機能

以下の表は、各 ReSharper 機能がサポートされている言語 / テクノロジーを説明しています。これらは言語固有の機能のみをリストし、プロジェクト依存関係ダイアグラム、名前空間の調整リファクタリング、スタックトレースエクスプローラーなどのプロジェクト / ソリューションスコープの多くの機能を含まず、最近のファイルを表示します。コード解析:コードインスペクション

ASP.NET MVC 特有の機能

ReSharper には、一般的な ASP.NET 機能に加えて、ASP.NET MVC での作業をより簡単にサポートする特殊機能があります。構文のハイライト:ASP.NET MVC メソッド呼び出しとパラメーターの特別な構文のハイライト: コード補完:文字列リテラルでアクションとコントローラーを参照するための専用コード補完: ナビゲーションと検索:さまざまなナビゲーション機能がアクションとコントローラーでも機能します。コード生成:使用箇所から新しいコントローラーとアクションを作成する: 最終...