CA1402: Evite sobrecargas en interfaces visibles para COM
Nombre de tipo |
AvoidOverloadsInComVisibleInterfaces |
Identificador de comprobación |
CA1402 |
Categoría |
Microsoft.Interoperability |
Cambio problemático |
Sí |
Causa
Una interfaz visible para el Modelo de objetos componentes (COM) declara métodos sobrecargados.
Descripción de la regla
Cuando se exponen métodos sobrecargados a los clientes COM, sólo la primera sobrecarga de método conserva su nombre. Las sobrecargas subsiguientes reciben un nombre único resultante de anexar al nombre un carácter de subrayado ('_') y un entero correspondiente al orden de declaración de la sobrecarga. Por ejemplo, considere los siguientes métodos.
void SomeMethod(int valueOne);
void SomeMethod(int valueOne, int valueTwo, int valueThree);
void SomeMethod(int valueOne, int valueTwo);
Estos métodos se exponen a los clientes COM como los siguientes.
void SomeMethod(int valueOne);
void SomeMethod_2(int valueOne, int valueTwo, int valueThree);
void SomeMethod_3(int valueOne, int valueTwo);
Los clientes COM de Visual Basic 6 no pueden implementar métodos de interfaz mediante un carácter de subrayado en el nombre.
Cómo corregir infracciones
Para corregir una infracción de esta regla, cambie el nombre de los métodos sobrecargados de modo que sus nombres sean únicos. Como alternativa, puede hacer que la interfaz sea invisible para COM cambiando la accesibilidad a internal (Friend en Visual Basic) o aplicando el atributo System.Runtime.InteropServices.ComVisibleAttribute establecido en false.
Cuándo suprimir advertencias
No suprima las advertencias de esta regla.
Ejemplo
El ejemplo siguiente muestra una interfaz que infringe la regla y otra que la cumple.
Imports System
Imports System.Runtime.InteropServices
<Assembly: ComVisibleAttribute(False)>
Namespace InteroperabilityLibrary
' This interface violates the rule.
<ComVisibleAttribute(True)> _
Public Interface IOverloadedInterface
Sub SomeSub(valueOne As Integer)
Sub SomeSub(valueOne As Integer, valueTwo As Integer)
End Interface
' This interface satisfies the rule.
<ComVisibleAttribute(True)> _
Public Interface INotOverloadedInterface
Sub SomeSub(valueOne As Integer)
Sub AnotherSub(valueOne As Integer, valueTwo As Integer)
End Interface
End Namespace
using System;
using System.Runtime.InteropServices;
[assembly: ComVisible(false)]
namespace InteroperabilityLibrary
{
// This interface violates the rule.
[ComVisible(true)]
public interface IOverloadedInterface
{
void SomeMethod(int valueOne);
void SomeMethod(int valueOne, int valueTwo);
}
// This interface satisfies the rule.
[ComVisible(true)]
public interface INotOverloadedInterface
{
void SomeMethod(int valueOne);
void AnotherMethod(int valueOne, int valueTwo);
}
}
Reglas relacionadas
CA1413: Evite campos no públicos en tipos de valor visibles para COM
CA1407: Evite miembros estáticos en tipos visibles para COM
CA1017: Marcar los ensamblados con ComVisibleAttribute
Vea también
Referencia
Long (Tipo de datos, Visual Basic)