Udostępnij za pośrednictwem


CA1402: Unikaj przeciążeń w interfejsach widocznych dla modelu COM

TypeName

AvoidOverloadsInComVisibleInterfaces

CheckId

CA1402

Kategoria

Microsoft.Interoperability

Zmiana kluczowa

Kluczowa

Przyczyna

Widoczny interfejs modelu Component Object Model (COM) deklaruje przeciążone metody.

Opis reguły

Gdy przeciążone metody są udostępniane klientom COM, tylko pierwsze przeciążenie metody zachowuje swoją nazwę.Kolejne przeciążenia są jednoznacznie nazywane przez dołączenie do nazwy znaku podkreślenia "_" i liczby całkowitej, która odpowiada kolejności deklaracji przeciążenia.Na przykład, należy rozważyć następujące metody.

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

Metody te są narażone na klientów COM tak jak następujące.

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

Klienci programu Visual Basic 6 nie mogą implementować metod interfejsu za pomocą znaku podkreślenia w nazwie.

Jak naprawić naruszenia

Aby naprawić naruszenie tej zasady, należy zmienić nazwy przeciążonych metod tak, aby były one unikatowe.Alternatywnie, można sprawić aby interfejs był niewidoczny dla COM, zmieniając dostępność na internal (Friend w Visual Basic) lub przez zastosowanie atrybutu ComVisibleAttribute ustawionego na false.

Kiedy pominąć ostrzeżenia

Nie należy pomijać ostrzeżenia dotyczącego tej reguły.

Przykład

Poniższy przykład ilustruje interfejs, który narusza reguły oraz interfejs, który spełnia reguły.

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

Powiązane reguły

CA1413: Unikaj pól niepublicznych w typach wartościowych widocznych dla modelu COM

CA1407: Unikaj statycznych elementów członkowskich w typach widocznych dla modelu COM

CA1017: Oznacz zestawy za pomocą ComVisibleAttribute

Zobacz też

Informacje

Long — Typ danych (Visual Basic)

Inne zasoby

Współdziałanie z kodem niezarządzanym