CA1402: Evitare gli overload nelle interfacce visibili a COM
Articolo | Valore |
---|---|
ID regola | CA1402 |
Category | Microsoft.Interoperability |
Modifica | Interruzione |
Causa
Un'interfaccia visibile COM (Component Object Model) dichiara metodi di overload.
Descrizione regola
Quando i metodi sottoposti a overload vengono esposti ai client COM, solo il primo overload di metodo conserva il proprio nome. Gli overload successivi vengono rinominati in modo univoco aggiungendo al nome un carattere di sottolineatura '_' e un numero intero che corrisponde all'ordine di dichiarazione dell'overload. Si considerino ad esempio i metodi seguenti:
void SomeMethod(int valueOne);
void SomeMethod(int valueOne, int valueTwo, int valueThree);
void SomeMethod(int valueOne, int valueTwo);
Questi metodi vengono esposti ai client COM come indicato di seguito.
void SomeMethod(int valueOne);
void SomeMethod_2(int valueOne, int valueTwo, int valueThree);
void SomeMethod_3(int valueOne, int valueTwo);
I client COM di Visual Basic 6 non possono implementare metodi di interfaccia usando un carattere di sottolineatura nel nome.
Come correggere le violazioni
Per correggere una violazione di questa regola, rinominare i metodi di overload in modo che i nomi siano univoci. In alternativa, rendere l'interfaccia invisibile a COM modificando l'accessibilità in internal
(Friend
in Visual Basic) o applicando l'attributo System.Runtime.InteropServices.ComVisibleAttribute impostato a false
.
Quando eliminare gli avvisi
Non escludere un avviso da questa regola.
Esempio
Nell'esempio seguente viene illustrata un'interfaccia che viola la regola e un'interfaccia che soddisfa la regola.
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);
}
}
Regole correlate
CA1413: Evitare i campi non pubblici nei tipi valore visibili a COM
CA1407: Evitare i membri statici nei tipi visibili a COM
CA1017: Contrassegnare gli assembly con ComVisibleAttribute
Vedi anche
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per