Udostępnij za pośrednictwem


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

Koncepcje

Wprowadzenie interfejsu klasy

Inne zasoby

Współdziałanie z kodu niezarządzanego