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

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