CA1040: Uniknąć pustych interfejsów
TypeName |
AvoidEmptyInterfaces |
CheckId |
CA1040 |
Kategoria |
Microsoft.Design |
Zmiana kluczowa |
Kluczowa |
Przyczyna
Interfejs nie deklaruje elementów członkowskich lub implementacji dwóch lub więcej interfejsów.
Opis reguły
Interfejsy definiują elementy członkowskie, które zapewniają zachowanie lub użycie kontraktu.Funkcjonalność opisana przez interfejs może zostać przyjęta przez dowolny typ, niezależnie od tego, gdzie ten typ się pojawia w hierarchii dziedziczenia.Typ implementuje interfejs dostarczając implementacje dla elementów członkowskich interfejsu.Pusty interfejs nie definiuje żadnych elementów członkowskich.Dlatego nie definiuje kontraktu, który można zaimplementować.
Jeśli projekt zawiera puste interfejsy, które mają zostać zaimplementowane przez inne typy, prawdopodobnie używasz interfejsu jako znacznika lub sposobu identyfikowania grupy typów.Jeśli ta identyfikacja wystąpi w czasie wykonywania, prawidłowym sposobem osiągnięcia tego celu jest użycie atrybutu niestandardowego.Należy użyć obecności lub braku atrybutu lub właściwości atrybutu, aby identyfikować typy docelowe.Jeśli identyfikacja musi wystąpić w czasie kompilacji, akceptowalne jest użycie pustego interfejsu.
Jak naprawić naruszenia
Usuń interfejs lub dodaj do niego elementy członkowskie.Jeśli pusty interfejs jest używany do nadania etykiety zbiorowi typów, należy zastąpić interfejs atrybutem niestandardowym.
Kiedy pominąć ostrzeżenia
Można bezpiecznie pominąć ostrzeżenie od tej reguły, gdy interfejs jest używany do identyfikowania zbioru typów w czasie kompilacji.
Przykład
Poniższy przykład pokazuje pusty interfejs.
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
{
};
}