Partager via


CA1413 : Éviter les champs non publics dans les types valeur visibles par COM

TypeName

AvoidNonpublicFieldsInComVisibleValueTypes

CheckId

CA1413

Catégorie

Microsoft.Interoperability

Modification avec rupture

Oui

Cause

Un type valeur qui est spécifiquement marqué comme visible par l'objet COM (Component Object Model) déclare un champ d'instance non public.

Description de la règle

Les champs d'instance non publics des types valeur visibles par COM sont visibles par les clients COM. Passez en revue le contenu du champ pour voir les informations qui ne doivent pas être exposées, sinon vous aurez une conception imprévue ou des conséquences sur la sécurité.

Par défaut, tous les types valeur publics sont visibles par COM. Cependant, pour réduire les faux positifs, cette règle nécessite de la visibilité COM du type à déclarer explicitement. L'assembly conteneur doit être identifié par System.Runtime.InteropServices.ComVisibleAttribute ayant la valeur false et le type doit être identifié par ComVisibleAttribute ayant la valeur true.

Comment corriger les violations

Pour corriger une violation de cette règle et garder le champ masqué, remplacez le type valeur par un type référence ou supprimez l'attribut ComVisibleAttribute du type.

Quand supprimer les avertissements

Il est possible de supprimer sans risque un avertissement de cette règle si l'exposition publique du champ est acceptable.

Exemple

L'exemple suivant présente un type qui enfreint la règle.

Imports System
Imports System.Runtime.InteropServices

<Assembly: ComVisibleAttribute(False)>
Namespace InteroperabilityLibrary

   <ComVisibleAttribute(True)> _ 
   Public Structure SomeStructure

      Friend SomeInteger As Integer

   End Structure

End Namespace
using System;
using System.Runtime.InteropServices;

[assembly: ComVisible(false)]
namespace InteroperabilityLibrary
{
   [ComVisible(true)]
   public struct SomeStruct
   {
      internal int SomeValue;
   }
}

Règles connexes

CA1407 : Éviter les membres statiques dans les types visibles par COM

CA1017 : Marquer les assemblys avec ComVisibleAttribute

Voir aussi

Concepts

Qualification des types .NET en vue d'une interopérabilité

Autres ressources

Interopération avec du code non managé