Evitar interfaces vacías

Actualización: noviembre 2007

Nombre de tipo

AvoidEmptyInterfaces

Identificador de comprobación

CA1040

Categoría

Microsoft.Design

Cambio 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 modo de identificación de 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    
    {    
    };
}