Partilhar via


CA1405: os tipos base de tipo visível em COM devem ser visíveis em COM

TypeName

ComVisibleTypeBaseTypesShouldBeComVisible

CheckId

CA1405

Categoria

Microsoft.Interoperability

Alteração Significativa

DependsOnFix

Causa

Um tipo visível do Component Object Model (COM) é derivado de um tipo que não é visível COM.

Descrição da Regra

Quando um tipo de visível COM adiciona membros em uma nova versão, deve habitar por diretrizes restringidas para evitar dividir os clientes COM que são associados à versão atual.Um tipo que é invisível a COM presume que não precisará seguir estas regras de controle de versão do COM quando adiciona novos membros.No entanto, se um tipo de visível COM se deriva do tipo invisível COM e se expõe uma interface da classe de ClassInterfaceType.AutoDual ou de AutoDispatch (o padrão), todos os membros públicos do tipo de base (a menos que são marcados como invisível COM especificamente, que seriam redundantes) são expostos COM.Se o tipo de base adiciona novos membros em uma versão subsequente, todos os clientes COM que se associarem à interface da classe de tipo derivado podem interromper.Os tipos de devem derivar COM visíveis apenas os tipos visíveis COM para reduzir a possibilidade de interromper clientes COM.

Como Corrigir Violações

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

Quando Suprimir Alertas

Não elimine um alerta desta 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

ClassInterfaceAttribute

Conceitos

Introdução à interface de classe

Outros recursos

Interoperação com código não gerenciado