Sdílet prostřednictvím


CA1402: Vyhnout přetížení v viditelné rozhraní 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 System.Runtime.InteropServices.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: Nepoužívejte neveřejné pole zobrazena hodnota typů COM

CA1407: Vyhnout se statickým členům v viditelné typy modelu COM

CA1017: Značka sestav s ComVisibleAttribute

Viz také

Referenční dokumentace

Datový typ Long (Visual Basic)

Další zdroje

Spolupráce s nespravovaným kódem.