CA1402: Evitar sobrecargas em interfaces de COM visíveis
TypeName |
AvoidOverloadsInComVisibleInterfaces |
CheckId |
CA1402 |
<strong>Categoria</strong> |
Microsoft.Interoperability |
Alteração significativa |
Quebrando |
Causa
Um modelo de objeto de componente (COM) declara a interface visível sobrecarregado métodos.
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 são renomeadas exclusivamente por meio do acréscimo ao nome de um caractere de sublinhado '_' e um inteiro que corresponde à ordem de declaração da 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 a clientes COM a seguinte.
void SomeMethod(int valueOne);
void SomeMethod_2(int valueOne, int valueTwo, int valueThree);
void SomeMethod_3(int valueOne, int valueTwo);
Clientes COM 6 de Visual Basic não podem implementar métodos de interface usando um sublinhado no nome.
Como corrigir violações
Para corrigir uma violação desta regra, renomeie os métodos sobrecarregados, para que os nomes são exclusivos.Como alternativa, fazer a interface invisível COM alterando a acessibilidade ao internal (Friend na 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
CA1413: Evite campos não públicos em tipos de valor visível COM
CA1407: Evitar membros estáticos em tipos de visíveis COM
CA1017: Marcar assemblies com ComVisibleAttribute
Consulte também
Referência
Tipo de dado Long (Visual Basic)