Freigeben über


Vermeiden von Überladungen in ComVisible-Schnittstellen

Aktualisiert: November 2007

     TypeName

AvoidOverloadsInComVisibleInterfaces

CheckId

CA1402

Kategorie

Microsoft.Interoperability

Unterbrechende Änderung

Breaking

Ursache

Eine ComVisible-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 für COM-Clients folgendermaßen 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.

Behandlung 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

Vermeiden von nicht öffentlichen Feldern in ComVisible-Werttypen

Statische Member in für COM sichtbaren Typen vermeiden

Markieren von Assemblys mit dem ComVisible-Attribut

Siehe auch

Referenz

Long-Datentyp (Visual Basic)

Weitere Ressourcen

Interaktion mit nicht verwaltetem Code