CA1040: Evitare l'utilizzo di interfacce vuote
TypeName |
AvoidEmptyInterfaces |
CheckId |
CA1040 |
Category |
Microsoft.Design |
Breaking Change |
Breaking |
Causa
L'interfaccia non dichiara alcun membro né implementa due o più interfacce.
Descrizione della regola
Le interfacce definiscono membri che forniscono un comportamento o un contratto di utilizzo.La funzionalità descritta dall'interfaccia può essere adottata da qualsiasi tipo, indipendentemente dal punto in cui il tipo è visualizzato nella gerarchia di ereditarietà.Un tipo implementa un'interfaccia fornendo implementazioni per i membri dell'interfaccia.Un'interfaccia vuota non definisce alcun membro.Di conseguenza, non definisce un contratto che può essere implementato.
Se la progettazione include interfacce vuote di cui si prevede l'implementazione da parte di tipi, è probabile che sia in uso un'interfaccia come marcatore o come mezzo per identificare un gruppo di tipi.Se questa identificazione si verifica in fase di esecuzione, la procedura corretta consiste nell'utilizzare un attributo personalizzato.Utilizzare la presenza o l'assenza dell'attributo oppure le proprietà dello stesso per identificare i tipi di destinazione.Se l'identificazione deve verificarsi in fase di compilazione, l'utilizzo di un'interfaccia vuota è accettabile.
Come correggere le violazioni
Rimuovere l'interfaccia o aggiungervi membri.Se l'interfaccia vuota viene utilizzata per etichettare un insieme di tipi, sostituirla con un attributo personalizzato.
Esclusione di avvisi
L'esclusione di un avviso da questa regola è sicura quando l'interfaccia viene utilizzata per identificare un set di tipi in fase di compilazione.
Esempio
Nell'esempio riportato di seguito viene illustrata un'interfaccia vuota.
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
{
};
}