ReSharper 2025.3 ヘルプ

コード検査: 冗長な「抽象」修飾子

C# 8.0 以降、インターフェースメンバーで abstract 修飾子を使用できます。ただし、インターフェースメンバーはデフォルトで抽象的であるため、この修飾子はオプションです。つまり、デフォルトの実装(英語)(C# 8.0 の新機能でもあります)がない限り、実装クラスでオーバーライドする必要があります。

そのため、ほとんどの場合、abstract 修飾子は冗長です。本体のないインターフェースメンバーは、同様のバイトコードにコンパイルされます。インターフェースメンバーで abstract 修飾子を使用する必要がある場合は、このメンバーがベースインターフェースのデフォルトの実装をキャンセルする場合のみです。

interface IBase { public void Foo() { Console.WriteLine("default implementation"); } } class DerivedFromBase : IBase { // no need to override 'Foo' since it has a default implementation } interface IAbstract : IBase { // Implementation without a body cancels the default implementation // in the base interface and has to be 'abstract' abstract void IBase.Foo(); // 'abstract' is redundant because this member is abstract anyway abstract void Bar(); } class DerivedFromAbstract : IAbstract { // Default implementation of 'Foo()' is cancelled // with 'abstract void IBase.M' in 'IAbstract' // therefore we have to provide an implementation here and // cannot use the default implementation from 'IBase' public void Foo() { Console.WriteLine("some implementation"); } // 'Bar' doesn't have a body in the base interface, // therefore we have to provide an implementation anyway public void Bar() { Console.WriteLine("some implementation"); } }
2024 年 2 月 11 日

関連ページ:

コードインスペクション設定を構成する

設計時コードインスペクションを構成する:デフォルトでは、ReSharper は、サポートされている言語に対応するすべてのファイルで設計時コードインスペクションを有効にします。必要に応じて、無効にすることができます。設計時コードインスペクションが有効かどうかに関係なく、コードインスペクションは常に特定のスコープで実行できます。メインメニューからを選択するか、Alt+R O を押してから、左側のを選択します。設計時コードインスペクションを切り替えるには、コード分析を有効にするチェックボックスを使用し...

プロジェクト固有のプロパティを構成する

ReSharper の設定のメインセット(ReSharper | オプションダイアログで設定)は、グローバルまたはソリューションごとに適用されます。各プロジェクトまたはフォルダーごとに個別に設定できる環境設定もあります。これらの設定は、プロジェクトアイテムのプロパティポップアップで利用できます。プロジェクトアイテムのプロパティポップアップは、ソリューションエクスプローラーでプロジェクトのコンテキストメニューからプロジェクト項目のプロパティを編集するを選択して呼び出すことができます。他の ReSh...

コード検査: 列挙型の一部の値は 'switch' 式内で処理されず、デフォルトアームの例外を介して処理されます

で switch 式を使用する場合、列挙値ごとにアームを用意する必要はありません。これらの値は破棄で処理されます。これは、いくつかの重要でない値を処理するために作成者によって意図されている場合があります。ただし、破棄が例外をスローする場合、を未処理の値とともに使用すると、例外もスローされます。これは、新しい値をに追加し、それに応じてを更新し忘れたためと考えられます。enum MyColor { Red, Green, Blue } string GetColor(MyColor color) =&...