Udostępnij za pośrednictwem


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