CA1412: Marcar interfaces ComSource como IDispatch

Item Valor
RuleId CA1412
Categoria Microsoft.Interoperability
Alteração da falha Quebra

Causa

Um tipo é marcado com o atributo ComSourceInterfacesAttribute e pelo menos uma interface especificada não é marcada com o atributo InterfaceTypeAttribute definido como o valor InterfaceIsDispatch.

Descrição da regra

ComSourceInterfacesAttribute é usado para identificar as interfaces de evento que uma classe expõe aos clientes COM (Component Object Model). Essas interfaces precisam ser expostas como InterfaceIsIDispatch para permitir que os clientes COM do Visual Basic 6 recebam notificações de eventos. Por padrão, se uma interface não estiver marcada com o atributo InterfaceTypeAttribute, ela será exposta como uma interface dupla.

Como corrigir violações

Para corrigir uma violação dessa regra, adicione ou modifique o atributo InterfaceTypeAttribute para que seu valor seja definido como InterfaceIsIDispatch para todas as interfaces especificadas com o atributo ComSourceInterfacesAttribute.

Quando suprimir avisos

Não suprima um aviso nessa regra.

Exemplo

O exemplo a seguir mostra uma classe em que uma das interfaces viola a regra.

using System;
using System.Runtime.InteropServices;

[assembly: ComVisible(true)]
namespace InteroperabilityLibrary
{
   // This violates the rule for type EventSource.
   [InterfaceType(ComInterfaceType.InterfaceIsDual)]
   public interface IEventsInterface
   {
      void EventOne();
      void EventTwo();
   }

   // This satisfies the rule.
   [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
   public interface IMoreEventsInterface
   {
      void EventThree();
      void EventFour();
   }

   [ComSourceInterfaces(
      "InteroperabilityLibrary.IEventsInterface\0" + 
      "InteroperabilityLibrary.IMoreEventsInterface")]
   public class EventSource
   {
      // Event and method declarations.
   }
}

CA1408: Não usar AutoDual ClassInterfaceType

Confira também