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