Condividi tramite


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