Sdílet prostřednictvím


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)

Další zdroje

Spolupráce s nespravovaným kódem