CA1405: Typów podstawowych widoczne typu COM powinny być widoczne COM
TypeName |
ComVisibleTypeBaseTypesShouldBeComVisible |
CheckId |
CA1405 |
Kategoria |
Microsoft.Interoperability |
Złamanie zmiany |
DependsOnFix |
Przyczyna
Typ widocznych hosta skryptów systemu Windows (COM, Component Object Model) pochodzi od typu, który nie jest widoczny COM.
Opis reguły
Gdy widoczne typu COM dodaje członków w nowej wersji, muszą przestrzegać ścisłych wytycznych, aby zapobiec przerywaniu klientów modelu COM, które wiążą się z bieżącej wersji.Typ, który jest niewidoczny dla modelu COM zakłada, że nie kierować się te reguły kontroli wersji modelu COM dodaje nowych członków.Jednakże jeśli widoczne COM typu pochodzi od typu niewidoczne COM i uwidacznia interfejsu klasy ClassInterfaceType.AutoDual lub AutoDispatch (domyślnie), wszystkich członków publicznych typu podstawowego (o ile są wyraźnie oznaczone jako niewidoczne, COM, który byłby nadmiarowe) są narażone na modelu COM.Jeśli typ podstawowy dodaje nowych członków w późniejszych wersji, może spowodować uszkodzenie wszystkich klientów COM, które wiążą się z interfejsu klasy typu pochodnego.Typy widoczne COM powinny wynikają jedynie z COM widoczne typów, aby zmniejszyć prawdopodobieństwo wytrzymałości na złamanie COM klientów.
Jak naprawić naruszenia
Aby naprawić naruszenie tej zasady, niewidoczna typów podstawowych widoczne COM lub COM typu pochodnego.
Kiedy do pomijania ostrzeżenia
Nie pomijaj ostrzeżenie od tej reguły.
Przykład
Poniższy przykład pokazuje typ, który narusza reguły.
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) {}
}
}
Zobacz też
Informacje
System.Runtime.InteropServices.ClassInterfaceAttribute