CA1040: Evitar interfaces vacíasCA1040: Avoid empty interfaces

TypeNameTypeName AvoidEmptyInterfacesAvoidEmptyInterfaces
Identificador de comprobaciónCheckId CA1040CA1040
CategoríaCategory Microsoft.DesignMicrosoft.Design
Cambio problemáticoBreaking Change ProblemáticoBreaking

MotivoCause

La interfaz no declara a ningún miembro ni lo implementa dos o más interfaces.The interface does not declare any members or implement two or more other interfaces.

Descripción de la reglaRule Description

Las interfaces definen miembros que proporcionan un comportamiento o acuerdo de uso.Interfaces define members that provide a behavior or usage contract. 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.The functionality that is described by the interface can be adopted by any type, regardless of where the type appears in the inheritance hierarchy. Un tipo implementa una interfaz proporcionando las implementaciones para los miembros de la interfaz.A type implements an interface by providing implementations for the members of the interface. Una interfaz vacía no define ningún miembro.An empty interface does not define any members. Por lo tanto, no define un contrato que se puede implementar.Therefore, it does not define a contract that can be implemented.

Si el diseño incluye vacía interfaces que los tipos se esperan para implementar, probablemente está utilizando una interfaz como un marcador o una forma de identificar un grupo de tipos.If your design includes empty interfaces that types are expected to implement, you are probably using an interface as a marker or a way to identify a group of types. Si esta identificación se produce en tiempo de ejecución, la manera correcta de lograrlo es utilizar un atributo personalizado.If this identification will occur at run time, the correct way to accomplish this is to use a custom attribute. Utilice la presencia o ausencia del atributo o las propiedades del atributo, para identificar los tipos de destino.Use the presence or absence of the attribute, or the properties of the attribute, to identify the target types. Si la identificación debe producirse en tiempo de compilación, es aceptable utilizar una interfaz vacía.If the identification must occur at compile time, then it is acceptable to use an empty interface.

Cómo corregir infraccionesHow to Fix Violations

Quite la interfaz o agregarle a miembros.Remove the interface or add members to it. Si la interfaz vacía es que se utiliza para etiquetar un conjunto de tipos, reemplace la interfaz con un atributo personalizado.If the empty interface is being used to label a set of types, replace the interface with a custom attribute.

Cuándo suprimir advertenciasWhen to Suppress Warnings

Es seguro suprimir una advertencia de esta regla cuando la interfaz se usa para identificar un conjunto de tipos en tiempo de compilación.It is safe to suppress a warning from this rule when the interface is used to identify a set of types at compile time.

EjemploExample

En el ejemplo siguiente se muestra una interfaz vacía.The following example shows an empty interface.

using System;

namespace DesignLibrary
{
   public interface IBadInterface  // Violates rule
   {
   }
}
#include "stdafx.h"
using namespace System;
 
namespace Samples
{
    // Violates this rule
    public interface class IEmptyInterface    
	{    
	};
}
Imports System     

Namespace Samples         

    Public Interface IBadInterface  ' Violates rule         
    End Interface     

End Namespace