Compartir a través de


CA1402: Evite sobrecargas en interfaces visibles para COM

Nombre de tipo

AvoidOverloadsInComVisibleInterfaces

Identificador de comprobación

CA1402

Categoría

Microsoft.Interoperability

Cambio problemático

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)

Otros recursos

Interoperar con código no administrado