CA1405 : Les types de base type visibles par COM doivent être visibles par COMCA1405: COM visible type base types should be COM visible

TypeNameTypeName ComVisibleTypeBaseTypesShouldBeComVisibleComVisibleTypeBaseTypesShouldBeComVisible
CheckIdCheckId CA1405CA1405
CategoryCategory Microsoft.InteroperabilityMicrosoft.Interoperability
Modification avec ruptureBreaking Change DependsOnFixDependsOnFix

CauseCause

Un type visible du modèle COM (Component Object) dérive d’un type qui n’est pas visible par COM.A Component Object Model (COM) visible type derives from a type that is not COM visible.

Description de la règleRule Description

Quand un type visible par COM ajoute des membres dans une nouvelle version, il doit se conformer aux recommandations strictes afin d’éviter l’interruption des clients COM qui se lient à la version actuelle.When a COM visible type adds members in a new version, it must abide by strict guidelines to avoid breaking COM clients that bind to the current version. Un type qui est invisible dans COM suppose qu’il ne dispose pas de suivre ces règles de versioning COM lorsqu’il ajoute de nouveaux membres.A type that is invisible to COM presumes it does not have to follow these COM versioning rules when it adds new members. Toutefois, si un visibles par COM type dérive du type invisible par COM et expose une interface de classe de System.Runtime.InteropServices.ClassInterfaceType ou ClassInterfaceType (la valeur par défaut), tous les membres publics du type de base (sauf si elles sont spécifiquement marquées comme COM invisibles, ce qui serait redondant) sont exposées à COM.However, if a COM visible type derives from the COM invisible type and exposes a class interface of System.Runtime.InteropServices.ClassInterfaceType or ClassInterfaceType (the default), all public members of the base type (unless they are specifically marked as COM invisible, which would be redundant) are exposed to COM. Si le type de base ajoute de nouveaux membres dans une version ultérieure, les clients COM qui se lient à l’interface de classe du type dérivé peuvent interrompre.If the base type adds new members in a subsequent version, any COM clients that bind to the class interface of the derived type might break. Types visibles par COM doivent dériver uniquement de types visibles par COM afin de réduire le risque d’interrompre les clients COM.COM visible types should derive only from COM visible types to reduce the chance of breaking COM clients.

Comment corriger les violationsHow to Fix Violations

Pour corriger une violation de cette règle, rendez les types visibles par COM de base ou le type dérivé COM invisible.To fix a violation of this rule, make the base types COM visible or the derived type COM invisible.

Quand supprimer les avertissementsWhen to Suppress Warnings

Ne supprimez aucun avertissement de cette règle.Do not suppress a warning from this rule.

ExempleExample

L’exemple suivant montre un type qui enfreint la règle.The following example shows a type that violates the rule.

Imports System
Imports System.Runtime.InteropServices

<Assembly: ComVisibleAttribute(False)>
Namespace InteroperabilityLibrary

   <ComVisibleAttribute(False)> _ 
   Public Class BaseClass

      Sub SomeSub(valueOne As Integer)
      End Sub

   End Class

   ' This class violates the rule.
   <ComVisibleAttribute(True)> _ 
   Public Class DerivedClass
      Inherits BaseClass

      Sub AnotherSub(valueOne As Integer, valueTwo As Integer)
      End Sub

   End Class

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

[assembly: ComVisible(false)]
namespace InteroperabilityLibrary
{
   [ComVisible(false)]
   public class BaseClass
   {
      public void SomeMethod(int valueOne) {}
   }

   // This class violates the rule.
   [ComVisible(true)]
   public class DerivedClass : BaseClass
   {
      public void AnotherMethod(int valueOne, int valueTwo) {}
   }
}

Voir aussiSee Also

System.Runtime.InteropServices.ClassInterfaceAttribute
Interopération avec du code non managéInteroperating with Unmanaged Code