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)