CA1040 : Éviter les interfaces videsCA1040: Avoid empty interfaces

TypeNameTypeName AvoidEmptyInterfacesAvoidEmptyInterfaces
CheckIdCheckId CA1040CA1040
CategoryCategory Microsoft.DesignMicrosoft.Design
Modification avec ruptureBreaking Change RuptureBreaking

CauseCause

L’interface ne déclare aucun membre ni implémenter deux ou plusieurs autres interfaces.The interface does not declare any members or implement two or more other interfaces.

Description de la règleRule Description

Les interfaces définissent des membres qui fournissent un comportement ou un contrat d'utilisation.Interfaces define members that provide a behavior or usage contract. 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.The functionality that is described by the interface can be adopted by any type, regardless of where the type appears in the inheritance hierarchy. Un type implémente une interface en fournissant des implémentations pour les membres de celle-ci.A type implements an interface by providing implementations for the members of the interface. Une interface vide ne définit pas de tous les membres.An empty interface does not define any members. Par conséquent, il ne définit pas un contrat qui peut être implémenté.Therefore, it does not define a contract that can be implemented.

Si votre conception comprend vide les interfaces que les types sont censés implémenter, vous utilisez probablement une interface en tant qu’un marqueur ou d’un moyen d’identifier un groupe de types.If your design includes empty interfaces that types are expected to implement, you are probably using an interface as a marker or a way to identify a group of types. Si cette identification se produit au moment de l’exécution, la méthode correcte pour y parvenir est d’utiliser un attribut personnalisé.If this identification will occur at run time, the correct way to accomplish this is to use a custom attribute. Utilisez la présence ou l’absence de l’attribut, ou les propriétés de l’attribut, pour identifier les types de cibles.Use the presence or absence of the attribute, or the properties of the attribute, to identify the target types. Si l’identification doit se produire au moment de la compilation, il est acceptable d’utiliser une interface vide.If the identification must occur at compile time, then it is acceptable to use an empty interface.

Comment corriger les violationsHow to Fix Violations

Supprimer l’interface ou ajouter des membres.Remove the interface or add members to it. Si l’interface vide est utilisé pour étiqueter un ensemble de types, remplacez l’interface avec un attribut personnalisé.If the empty interface is being used to label a set of types, replace the interface with a custom attribute.

Quand supprimer les avertissementsWhen to Suppress Warnings

Il est possible de supprimer un avertissement de cette règle lorsque l’interface est utilisée pour identifier un ensemble de types au moment de la compilation.It is safe to suppress a warning from this rule when the interface is used to identify a set of types at compile time.

ExempleExample

L’exemple suivant montre une interface vide.The following example shows an empty interface.

using System;

namespace DesignLibrary
{
   public interface IBadInterface  // Violates rule
   {
   }
}
#include "stdafx.h"
using namespace System;
 
namespace Samples
{
    // Violates this rule
    public interface class IEmptyInterface    
	{    
	};
}
Imports System     

Namespace Samples         

    Public Interface IBadInterface  ' Violates rule         
    End Interface     

End Namespace