次の方法で共有


CA1040: 空のインターフェイスは使用しないでください

TypeName

AvoidEmptyInterfaces

CheckId

CA1040

分類

Microsoft.Design

互換性に影響する変更点

あり

原因

インターフェイスにメンバーが宣言されていないか、他の複数のインターフェイスが実装されていません。

規則の説明

インターフェイスには、動作や使用のコントラクトを実現するメンバーが定義されます。インターフェイスで示される機能は、継承の階層構造内に型が存在するかどうかにかかわらず、どの型からも適用できます。型ではインターフェイスのメンバーに実装することで、インターフェイスが実装されます。空のインターフェイスではメンバーが定義されません。そのため、実装できるコントラクトも定義されません。

型の実装が期待される空のインターフェイスをデザインに含めるのは、マーカーとして、または型のグループを識別する方法として、インターフェイスを使用している場合が考えられます。このような識別を実行時に行う場合、カスタム属性を使用する方が適切です。属性の有無、または属性のプロパティを使用して、対象となる型を識別します。コンパイル時に識別処理が発生する場合は、空のインターフェイスを使用できます。

違反の修正方法

空のインターフェイスを削除するか、空のインターフェイスにメンバーを追加します。空のインターフェイスが型にラベルを付けるために使用されている場合、そのインターフェイスはカスタム属性に置換します。

警告を抑制する状況

コンパイル時に型を識別するためにインターフェイスを使用する場合は、この規則による警告を抑制しても安全です。

使用例

次に、空のインターフェイス例を示します。

Imports System     

Namespace Samples         

    Public Interface IBadInterface  ' Violates rule         
    End Interface      

End Namespace
using System;

namespace DesignLibrary
{
   public interface IBadInterface  // Violates rule
   {
   }
}
#include "stdafx.h" 
using namespace System;

namespace Samples
{
    // Violates this rule 
    public interface class IEmptyInterface    
    {    
    };
}