É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é