Compartilhar via


Evitar sobrecargas em interfaces visíveis COM

TypeName

AvoidOverloadsInComVisibleInterfaces

CheckId

CA1402

Category (Categoria)

Microsoft.interoperabilidade

Quebrando alterar

Quebrando

Causa

Uma interface visível COM declara métodos sobrecarregados.

Descrição da regra

Quando os métodos sobrecarregados estão expostos a clientes COM, apenas a primeira sobrecarga de método manterá seu nome.Sobrecargas subseqüentes serão renomeadas exclusivamente acrescentando ao nome de um caractere de sublinhado '_' e um inteiro que corresponde à ordem de declaração de sobrecarga.Por exemplo, considere os seguintes métodos:

   void SomeMethod(int valueOne);
   void SomeMethod(int valueOne, int valueTwo, int valueThree);
   void SomeMethod(int valueOne, int valueTwo);

Esses métodos são expostos aos clientes COM sistema autônomo:

   void SomeMethod(int valueOne);
   void SomeMethod_2(int valueOne, int valueTwo, int valueThree);
   void SomeMethod_3(int valueOne, int valueTwo);

Visual Basic 6 COM clientes não podem implementar métodos de interface com um sublinhado no nome.

Como corrigir violações

Para corrigir uma violação dessa regra renomear métodos sobrecarregados para que os nomes seja exclusivos.Como alternativa, tornar a interface invisível para COM alterando a acessibilidade para internal (Friend no Visual Basic) ou aplicando o System.Runtime.InteropServices.ComVisibleAttribute atributo definido como false.

Quando suprimir avisos

Não suprimir um aviso da regra.

Exemplo

O exemplo a seguir mostra uma interface que viola a regra e uma interface que satisfaça a regra.

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

Regras relacionadas

Evite campos não públicos em tipos de valor visível COM

Evitar membros estático em tipos visíveis com.

Marcar assemblies com ComVisibleAttribute

Consulte também

Referência

Tipo de dados Long (Visual Basic)

Outros recursos

Interoperação com Código Não-Gerenciado