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
{
};
}