Compartir a través de


CA1040: Evitar interfaces vacías

TypeName

AvoidEmptyInterfaces

Identificador de comprobación

CA1040

Categoría

Microsoft.Design

Cambio problemático

Problemático

Motivo

La interfaz no declara ningún miembro ni implementa otras dos o más interfaces.

Descripción de la regla

Las interfaces definen miembros que proporcionan un comportamiento o acuerdo de uso.Cualquier tipo puede adoptar la funcionalidad descrita por la interfaz sin tener en cuenta dónde aparece el tipo en la jerarquía de herencia.Un tipo implementa una interfaz proporcionando las implementaciones para los miembros de la interfaz.Una interfaz vacía no define ningún miembro.Por tanto, no define ningún contrato que pueda implementarse.

Si su diseño incluye interfaces vacías que esperan implementar los tipos, probablemente esté utilizando una interfaz como marcador o un método para identificar un grupo de tipos.Si esta identificación se produce en tiempo de ejecución, la forma correcta de lograr esto es utilizar un atributo personalizado.Utilice la presencia o ausencia del atributo, o las propiedades del atributo, para identificar los tipos de destino.Si la identificación debe producirse en tiempo de compilación, entonces es aceptable utilizar una interfaz vacía.

Cómo corregir infracciones

Quite la interfaz o agréguele los miembros.Si la interfaz vacía se utiliza para etiquetar un conjunto de tipos, reemplace la interfaz con un atributo personalizado.

Cuándo suprimir advertencias

Es seguro suprimir una advertencia de esta regla si se utiliza la interfaz para identificar un conjunto de tipos en tiempo de compilación.

Ejemplo

El ejemplo siguiente muestra una interfaz vacía.

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