CA1408 : Ne pas utiliser le paramètre AutoDual ClassInterfaceType

Élément Valeur
ID de la règle CA1408
Category Microsoft.Interoperability
Modification avec rupture Rupture

Cause

Un type visible COM (Component Object Model) est marqué avec l’attribut ClassInterfaceAttribute défini sur la valeur AutoDual de ClassInterfaceType.

Description de la règle

Les types qui utilisent une interface double permettent aux clients de se lier à une disposition d'interface spécifique. Les modifications apportées à une version future de la disposition du type ou des types de base bloquent les clients COM qui se lient à l'interface. Par défaut, si l’attribut ClassInterfaceAttribute n’est pas spécifié, une interface de répartition uniquement est utilisée.

Sauf indication contraire, tous les types publics non génériques sont visibles par COM, et tous les types non publics génériques ne sont pas visibles par COM.

Comment corriger les violations

Pour corriger une infraction à cette règle, remplacez la valeur de l’attribut ClassInterfaceAttribute par la valeur None de ClassInterfaceType, et définissez explicitement l’interface.

Quand supprimer les avertissements

Ne supprimez pas les avertissements de cette règle, sauf si vous êtes sûr que la disposition du type et de ses types de base ne changera pas dans une version ultérieure.

Exemple

L’exemple suivant montre une classe qui enfreint la règle et une nouvelle déclaration de la classe pour utiliser une interface explicite.

using System;
using System.Runtime.InteropServices;

[assembly: ComVisible(true)]
namespace InteroperabilityLibrary
{
   // This violates the rule.
   [ClassInterface(ClassInterfaceType.AutoDual)]
   public class DualInterface
   {
      public void SomeMethod() {}
   }

   public interface IExplicitInterface
   {
      void SomeMethod();
   }

   [ClassInterface(ClassInterfaceType.None)]
   public class ExplicitInterface : IExplicitInterface
   {
      public void SomeMethod() {}
   }
}

CA1403 : Les types Structurer automatiquement ne doivent pas être visibles par COM

CA1412 : Marquer les interfaces ComSource comme IDispatch

Voir aussi