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() {}
}
}
Règles associées
CA1403 : Les types Structurer automatiquement ne doivent pas être visibles par COM
CA1412 : Marquer les interfaces ComSource comme IDispatch
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