CA1405: Tipos base de tipo visível no COM devem ser visíveis no COM

Item Valor
RuleId CA1405
Categoria Microsoft.Interoperability
Alteração da falha DependsOnFix

Causa

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

Descrição da regra

Quando um tipo COM visível adiciona membros em uma nova versão, ele precisa cumprir diretrizes rígidas para evitar a interrupção de clientes COM que se associam à versão atual. Um tipo invisível no COM presume que ele não precisa seguir essas regras de controle de versão COM quando adiciona novos membros. No entanto, se um tipo visível no COM deriva do tipo invisível no COM e expõe uma interface de classe de System.Runtime.InteropServices.ClassInterfaceType ou ClassInterfaceType (o padrão), todos os membros públicos do tipo base (a menos que sejam especificamente marcados como invisíveis no COM, o que seria redundante) serão expostos ao COM. Se o tipo base adicionar novos membros em uma versão subsequente, todos os clientes COM que se associam à interface de classe do tipo derivado poderão ser interrompidos. Os tipos visíveis no COM devem derivar apenas de tipos visíveis no COM para reduzir a chance de interrupção de clientes COM.

Como corrigir violações

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

Quando suprimir avisos

Não suprima um aviso nessa regra.

Exemplo

O seguinte exemplo mostra um tipo que viola a regra.

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

Confira também