Compartilhar via


CA1405: A tipos base do tipo visível COM devem estar visível em COM

TypeName

ComVisibleTypeBaseTypesShouldBeComVisible

CheckId

CA1405

<strong>Categoria</strong>

Microsoft.Interoperability

Alteração significativa

DependsOnFix

Causa

Um tipo de modelo de objeto componente (COM) visível deriva de um tipo que não é visível em COM.

Descrição da regra

Quando um tipo de visível COM adiciona membros em uma nova versão, ele deve obedecer aos orientações estritas para evitar a interrupção de clientes COM que ligam para a versão atual.Um tipo que é invisível para COM partem do princípio de não tem a seguir essas regras de controle de versão COM ao adicionar novos membros.No entanto, se um visível em COM tipo deriva do tipo invisível COM e expõe uma interface de classe de ClassInterfaceType.AutoDual ou AutoDispatch (padrão), todos os membros públicos do tipo base (a menos que especificamente, eles são marcados como COM invisível, que seria redundante) são expostos com.Se o tipo base adiciona novos membros em uma versão posterior, todos os clientes COM que se vinculam à interface de classe do tipo derivado podem romper.Tipos de visíveis COM devem derivar somente a partir de tipos visíveis de COM para reduzir a chance de quebrar a clientes COM.

Como corrigir violações

Para corrigir uma violação desta regra, tornar os tipos base COM visível ou o tipo derivado COM invisível.

Quando suprimir avisos

Não suprimir um aviso da regra.

Exemplo

O exemplo a seguir mostra um tipo que viola a regra.

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

Consulte também

Referência

System.Runtime.InteropServices.ClassInterfaceAttribute

Conceitos

Apresentando a Interface de classe

Outros recursos

Interoperar com código não gerenciado