Partager via


CA1040 : Éviter les interfaces vides

TypeName

AvoidEmptyInterfaces

CheckId

CA1040

Catégorie

Microsoft.CSharp

Modification avec rupture

Oui

Cause

L'interface ne déclare aucun membre, ni n'implémente deux ou plusieurs autres interfaces.

Description de la règle

Les interfaces définissent des membres qui fournissent un comportement ou un contrat d'utilisation.Les fonctionnalités décrites par l'interface peuvent être adoptées par tout type, indépendamment de l'endroit où le type figure dans la hiérarchie d'héritage.Un type implémente une interface en fournissant des implémentations pour les membres de celle-ci.Une interface vide ne définit aucun membre.Elle ne définit donc aucun contrat pouvant être implémenté.

Si votre conception comprend des interfaces vides que les types sont censés implémenter, vous utilisez probablement une interface en tant que marqueur, ou comme un moyen d'identifier un groupe de types.Si cette identification se produit au moment de l'exécution, la manière correcte d'y parvenir consiste à utiliser un attribut personnalisé.Utilisez la présence ou l'absence de l'attribut, ou les propriétés de l'attribut, pour identifier les types cible.Si l'identification doit se produire au moment de la compilation, utiliser une interface vide est acceptable.

Comment corriger les violations

Supprimez l'interface ou ajoutez-lui des membres.Si l'interface vide est utilisée pour étiqueter un jeu de types, remplacez-la par un attribut personnalisé.

Quand supprimer les avertissements

Il est possible de supprimer sans risque un avertissement de cette règle lorsque l'interface est utilisée pour identifier un jeu de types au moment de la compilation.

Exemple

L'exemple suivant présente une interface vide.

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