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