等価メンバーを生成する
オブジェクトクラスでの等式メソッド(つまり Equals()
および GetHashCode()
)および等式演算子(つまり ==
および !=
)の実装により、参照の等式が保証されます。作成するタイプ(最終的に Object
から派生するため、デフォルトで参照の等価性を実装します)では、このタイプのオブジェクトの値の等価性を実装し、ハッシュコードをハッシュ目的の一意のオブジェクト識別子として使用することができます。この場合、タイプの等式メソッドと演算子をオーバーライドする必要があります。
ReSharper を使用すると、等価メンバーを生成するコマンドを使用してこれらのルーチンを自動化できます。
以下の例では、このコマンドを使用して、_radius
、_center
、_description
フィールドに基づいて Equals()
および GetHashCode()
メソッドを生成します。
生成前 | 生成後 |
---|---|
class Circle
{
/// <summary>Radius of the circle</summary>
int _radius;
/// <summary>Center point of the circle</summary>
Point _center;
/// <summary>Description of the circle</summary>
string _description;
}
|
class Circle
{
protected bool Equals(Circle other)
{
return _radius == other._radius
&& _center.Equals(other._center)
&& _description == other._description;
}
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj)) return false;
if (ReferenceEquals(this, obj)) return true;
if (obj.GetType() != this.GetType()) return false;
return Equals((Circle) obj);
}
public override int GetHashCode()
{
return HashCode.Combine(_radius, _center, _description);
}
/// <summary>Radius of the circle</summary>
int _radius;
/// <summary>Center point of the circle</summary>
Point _center;
/// <summary>Description of the circle</summary>
string _description;
}
|
等価メンバーのオーバーライドを生成する
エディターで、型名または型内の等価メンバーのオーバーライドを挿入する行にキャレットを置きます。キャレットが型名上にある場合、生成されたコードは型宣言の先頭に追加されます。
Alt+Insert を押すか、メインメニューから
を選択します。あるいは、Control+Shift+A を押して、ポップアップでコマンド名を入力して、そこで選択することもできます。生成ポップアップで、等価メンバーを選択します。
表示される生成ダイアログで、
Equals()
メソッドで比較し、GetHashCode()
メソッドでの値の生成に含めるフィールドを選択します。タイプにフィールド / プロパティがない場合、またはそれらのいずれかを選択しない場合、ReSharper は設定に応じて、新しい
NotImplementedException()
をスローし、デフォルト値を返し、生成されたメソッドの本体にコンパイルされないコードを置きます。ReSharper オプションの ページで設定を行うことができます。必要に応じて、ダイアログで次のコントロールを使用します。
フィールドは null 可能 — タイプに null 許容フィールドまたはプロパティがある場合に表示されます。デフォルトでは、このチェックボックスが選択されています。これは、ReSharper が選択されたフィールドに対して null チェックを生成することを意味します。null チェックが必要ない場合は、このチェックボックスをオフにすることができます。
文字列比較 — 型に文字列フィールドがある場合に表示されます。ReSharper は、選択された文字列に対して
string.Compare(string, string, StringComparison)
を生成します。セレクターを使用すると、StringComparison 引数に対して生成する値を選択できます。対応する上書きがすでに存在する場合は GetHashCode はすでに存在しますと Equals はすでに存在しますが表示され、次のいずれかを選択できるようになります。
メソッドがすでに存在する場合は置換します。
新しく生成されたメソッドを既存のメソッドと並べて置きます。
新しいメソッドの生成をすべてスキップします。
「System.HashCode」を使用して「GetHashcode」を実装します — このチェックボックスを選択すると、ReSharper は、生成された
GetHashcode
実装で System.HashCode(xxHash32(英語) を使用)のCombine
を使用します。それ以外の場合、ReSharper は独自のカスタム実装を生成します。等価演算子をオーバーロードする — 現在のタイプのカスタムの等式および不等式演算子(つまり、
>==
および!=
)を生成します。IEquatable<T> インターフェースを実装するは型固有の
Equals()
メソッドを実装しています。型チェックの比較 —
Equals()
メソッドがオブジェクトの型を比較する方法を選択できます。これとまったく同じタイプ
所有者の種類として正確に入力してください
タイプは所有者タイプまたはサブタイプのものです
完了をクリックしてウィザードを完了します。
オプションをクリックして、ReSharper オプションの ページで一般的なコード生成設定を確認または変更することもできます。
生成メニューでメンバーを無効にするを選択して 2 つのオーバーライドを生成することもできますが、その場合は両方とも基本メソッドを返します。
タイプ内の等価メンバーを生成する代わりに、タイプの等価比較クラスを生成できます。
この機能は、次の言語とテクノロジーでサポートされています。
ここで説明する手順と例では、C# の機能の使用について説明します。他の言語の詳細については、言語およびフレームワークセクションの対応するトピックを参照してください。
関連ページ:
欠落 / オーバーライドするメンバーを生成する
継承された型の場合、ReSharper には 2 つの関連するコード生成機能があります。不足しているメンバーの実装は、現在のクラスから欠落しているインターフェースメンバーまたは抽象メンバーを実装します。メンバーのオーバーライドは不足しているメンバーの実装と同じですが、適用可能な場合は仮想メンバーもオーバーライドします。通常、ReSharper は、実装されていないベースメンバーを持つ型をエラーとしてハイライトし、不足しているメンバーをクイックフィックスで生成できるため、不足しているメンバーの実装...
等価比較器を生成する
は、コレクション用のカスタマイズされた等価比較の実装を可能にする汎用 .NET インターフェースです。タイプの比較クラスを作成することは、そのタイプの Equals() メソッドと GetHashCode() メソッドを作成する代わりです。生成された comparer クラスは、インターフェースを実装し、カスタムおよび)メソッドを提供します。ReSharper は、等価比較子を生成するコマンドを提供して、comparer クラスの生成を自動化します。以下の例では、このコマンドを使用して、およびフィ...
さまざまな言語の ReSharper 機能
以下の表は、各 ReSharper 機能がサポートされている言語 / テクノロジーを説明しています。これらは言語固有の機能のみをリストし、プロジェクト依存関係ダイアグラム、名前空間の調整リファクタリング、スタックトレースエクスプローラーなどのプロジェクト / ソリューションスコープの多くの機能を含まず、最近のファイルを表示します。コード解析:コードインスペクション
ASP.NET MVC 特有の機能
ReSharper には、一般的な ASP.NET 機能に加えて、ASP.NET MVC での作業をより簡単にサポートする特殊機能があります。構文のハイライト:ASP.NET MVC メソッド呼び出しとパラメーターの特別な構文のハイライト: コード補完:文字列リテラルでアクションとコントローラーを参照するための専用コード補完: ナビゲーションと検索:さまざまなナビゲーション機能がアクションとコントローラーでも機能します。コード生成:使用箇所から新しいコントローラーとアクションを作成する: 最終...
言語による ReSharper: MSBuild
MSBuild は、アプリケーションを構築するために広く使用されているプラットフォームです。特定の XML タグを使用して、プロジェクトの構築方法や実行方法を定義できます。ReSharper を使用すると、より速く行うことができます。コード検査:あらかじめ定義された要素またはその属性の名前を誤って入力した場合、ReSharper はそのような不一致についてハイライト表示します。まだ定義されていないプロパティを参照しようとすると、ReSharper はそのようなケースも検出します。MSBuild...
言語による ReSharper: Google プロトコルバッファ (Protobuf)
ReSharper オプションのページで Protobuf サポートが明示的に有効になっている場合、ReSharper は Google Protocol Buffers (Protobuf) バージョン 2.x および 3.0 の .proto ファイルでコード分析および支援機能を提供します。ReSharper は、.proto ファイルの言語構文をハイライトし、エラーを検出してハイライトします。基本コード補完と他のタイピング支援機能はエディターで利用可能です。型と値の宣言に行き、それらの使用箇所を...