CA1402 : Éviter les surcharges dans les interfaces COM visibles
Élément | Valeur |
---|---|
ID de la règle | CA1402 |
Category | Microsoft.Interoperability |
Modification avec rupture | Rupture |
Cause
Une interface visible COM (Component Object Model) déclare des méthodes surchargées.
Description de la règle
Lorsque les méthodes surchargées sont exposées aux clients COM, seule la première surcharge de méthode conserve son nom. Les surcharges suivantes sont renommées de manière unique par l’ajout d’un trait de soulignement « _ » au nom et d’un entier qui correspond à l’ordre de déclaration de la surcharge. Prenons l’exemple des méthodes suivantes :
void SomeMethod(int valueOne);
void SomeMethod(int valueOne, int valueTwo, int valueThree);
void SomeMethod(int valueOne, int valueTwo);
Ces méthodes sont exposées aux clients COM comme suit.
void SomeMethod(int valueOne);
void SomeMethod_2(int valueOne, int valueTwo, int valueThree);
void SomeMethod_3(int valueOne, int valueTwo);
Les clients COM Visual Basic 6 ne peuvent pas implémenter de méthodes d’interface à l’aide d’un trait de soulignement dans le nom.
Comment corriger les violations
Pour corriger toute violation de cette règle, renommez les méthodes surchargées afin que les noms soient uniques. Vous pouvez également rendre l’interface invisible dans COM en remplaçant l’accessibilité par internal
(Friend
en Visual Basic) ou en appliquant l’attribut System.Runtime.InteropServices.ComVisibleAttribute défini sur false
.
Quand supprimer les avertissements
Ne supprimez aucun avertissement de cette règle.
Exemple
L’exemple suivant montre une interface conforme et une interface non conforme à la règle.
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);
}
}
Règles associées
CA1413 : Éviter les champs non publics dans les types valeur visibles par COM
CA1407 : Éviter les membres statiques dans les types visibles par COM
CA1017 : Marquer les assemblys avec ComVisibleAttribute
Voir aussi
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour