Partilhar via


Tipos base do tipo visíveis COM devem estar visível com.

TypeName

ComVisibleTypeBaseTypesShouldBeComVisible

CheckId

CA1405

Category (Categoria)

Microsoft.interoperabilidade

Quebrando alterar

DependsOnFix

Causa

Um tipo visível COM deriva de um tipo que não é visível COM.

Descrição da regra

Quando um tipo visível COM adiciona membros em uma nova versão, ele deve obedecer aos orientações estritas para evitar a interrupção COM clientes que ligam para a versão corrente.Um tipo que é invisível COM presume que não é necessário cumprir essas regras de controle de versão COM ao adicionar novos membros.No entanto, se um visíveis COM tipo deriva do tipo invisível COM e expõe uma interface de classe de ClassInterfaceType.AutoDual ou AutoDispatch (padrão), todos sistema autônomo membros públicos do tipo de base (a menos que especificamente marcados sistema autônomo COM invisível, que seria redundante) estão expostos a COM. Se o tipo de base adiciona novos membros em uma versão posterior, os clientes COM que BIND a interface de classe do tipo derivado podem romper.Tipos visíveis COM devem derivar apenas da tipos visíveis COM para reduzir a possibilidade de clientes COM ruptura.

Como corrigir violações

Para corrigir uma violação dessa regra faça 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

Conceitos

Apresentando a interface de classe

Referência

System.Runtime.InteropServices.ClassInterfaceAttribute

Outros recursos

Interoperação com Código Não-Gerenciado