Partager via


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

Mise à jour : novembre 2007

TypeName

AvoidNonpublicFieldsInComVisibleValueTypes

CheckId

CA1413

Catégorie

Microsoft.Interoperability

Modification avec rupture

Oui

Cause

Un type valeur qui est marqué spécifiquement comme visible par COM 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. Examinez 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. Toutefois, pour limiter les faux positifs, cette règle requiert que la visibilité COM du type soit déclarée explicitement ; l'assembly contenant doit être marqué avec System.Runtime.InteropServices.ComVisibleAttribute ayant la valeur false et le type doit être marqué avec 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 montre 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

Éviter les membres statiques dans les types visibles par COM

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é