Sdílet prostřednictvím


CA1405: Základní typy viditelný typ COM musí být viditelné COM

Název_typu

ComVisibleTypeBaseTypesShouldBeComVisible

CheckId

CA1405

Kategorie

Microsoft.interoperability

Změnit rozdělení

DependsOnFix

Příčina

Viditelný typ objektu modelu COM (Component) je odvozen od typu, který není viditelný COM.

Popis pravidla

Když viditelný typ COM přidá členy v nové verzi, musí dodržovat přísné pokyny, aby nebyly porušeny COM klientů, kteří vázat na aktuální verzi.Typ, který je neviditelný COM používají harmonizovanou předpokládá, že nemá dodržujte tato pravidla správy verzí modelu COM, když přidá nové členy.Pokud viditelné COM typu odvozen od typu COM neviditelné a zpřístupňuje rozhraní třídy ClassInterfaceType.AutoDual nebo AutoDispatch (výchozí), všechny členy veřejné základního typu (pokud jsou výslovně označeny jako neviditelný, COM, který by redundantní) jsou vystaveny COM.Pokud základní typ přidá nové členy v pozdější verzi, může přerušit všech COM klientů, kteří vazbu rozhraní třídy odvozeného typu.COM viditelné typy měly odvozovat pouze z COM viditelné typy snížit pravděpodobnost rozdělení COM klientů.

Jak opravit porušení

Opravit porušení tohoto pravidla, proveďte základní typy modelu COM, které jsou viditelné nebo odvozený typ COM neviditelné.

Při potlačení upozornění

Nepotlačovat upozornění od tohoto pravidla.

Příklad

Následující příklad ukazuje typ, který porušuje pravidlo.

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) {}
   }
}

Viz také

Referenční dokumentace

System.Runtime.InteropServices.ClassInterfaceAttribute

Koncepty

Úvod do třídy rozhraní

Další zdroje

Spolupráce s nespravovaným kódem.