Freigeben über


CA1402: Überladungen in für COM sichtbaren Schnittstellen vermeiden

TypeName

AvoidOverloadsInComVisibleInterfaces

CheckId

CA1402

Kategorie

Microsoft.Interoperability

Unterbrechende Änderung

Breaking

Ursache

Eine sichtbare Component Object Model (COM)-Schnittstelle deklariert überladene Methoden.

Regelbeschreibung

Wenn für COM-Clients überladene Methoden verfügbar gemacht werden, behält nur die erste Methodenüberladung ihren Namen. Nachfolgende Überladungen werden eindeutig umbenannt, indem dem Namen ein Unterstrich ('_') und eine ganze Zahl angefügt werden, die der Reihenfolge der Deklaration der Überladung entspricht. Betrachten Sie z. B. die folgenden Methoden:

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

Diese Methoden werden COM-Clients wie folgt verfügbar gemacht.

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

Visual Basic 6-COM-Clients können keine Schnittstellenmethoden mit einem Unterstrich im Namen implementieren.

Behandeln von Verstößen

Um einen Verstoß gegen diese Regel zu beheben, benennen Sie die überladenen Methoden um, sodass die Namen eindeutig sind. Sie können die Schnittstelle auch für COM sichtbar machen, indem Sie die Zugriffsart in internal ändern (Friend in Visual Basic) oder das auf false festgelegte System.Runtime.InteropServices.ComVisibleAttribute-Attribut übernehmen.

Wann sollten Warnungen unterdrückt werden?

Unterdrücken Sie keine Warnung dieser Regel.

Beispiel

Das folgende Beispiel zeigt eine Schnittstelle, die gegen die Regel verstößt, und eine Schnittstelle, die der Regel entspricht.

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

Verwandte Regeln

CA1413: Nicht öffentliche Felder in für COM sichtbaren Werttypen vermeiden

CA1407: Statische Member in für COM sichtbaren Typen vermeiden

CA1017: Assemblys mit ComVisibleAttribute markieren

Siehe auch

Referenz

Long-Datentyp (Visual Basic)

Weitere Ressourcen

Interoperation mit nicht verwaltetem Code