CA1402: Vyhněte se přetížení ve viditelných rozhraních modelu COM
TypeName |
AvoidOverloadsInComVisibleInterfaces |
CheckId |
CA1402 |
Kategorie |
Microsoft.interoperability |
Narušující změna |
Narušující |
Příčina
Viditelné rozhraní modelu COM (Component Object Model) deklaruje přetížené metody.
Popis pravidla
Když jsou přetížené metody vystaveny klientům modulu COM, zachová svůj název pouze první přetížení metody.Následné přetížení jsou jednoznačně přejmenována přidáním přípony podtržítko '_' a celého čísla odpovídajícího pořadí deklarace tohoto přetížení.Například, zvažte následující metody.
void SomeMethod(int valueOne);
void SomeMethod(int valueOne, int valueTwo, int valueThree);
void SomeMethod(int valueOne, int valueTwo);
Tyto metody jsou vystaveny klienty modelu COM jako následující.
void SomeMethod(int valueOne);
void SomeMethod_2(int valueOne, int valueTwo, int valueThree);
void SomeMethod_3(int valueOne, int valueTwo);
Klienti Visual Basic 6 COM nemohou implementovat metody rozhraní použitím podtržítka v názvu.
Jak vyřešit porušení
Pro vyřešení porušení tohoto pravidla přejmenujte přetížené metody tak, aby jejich názvy byly jedinečné.Alternativně, lze také udělat rozhraní neviditelné pro model COM pomocí změny přístupu k internal (Friend v Visual Basic) nebo použitím atributu ComVisibleAttribute nastaveného na false.
Kdy potlačit upozornění
Nepotlačujte upozornění na toto pravidlo.
Příklad
Následující příklad ukazuje rozhraní, které porušuje pravidlo, a rozhraní, které pravidlo splňuje.
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);
}
}
Související pravidla
CA1413: Vyhněte se neveřejným polím v hodnotách viditelných modulem COM
CA1407: Vyhněte se statickým členům ve viditelných typech modelu COM
CA1017: Označte sestavení pomocí atributu ComVisibleAttribute
Viz také
Referenční dokumentace
Long – datový typ (Visual Basic)