CA1412: Contrassegnare le interfacce ComSource come IDispatch

Articolo Valore
ID regola CA1412
Category Microsoft.Interoperability
Modifica Interruzione

Causa

Un tipo è contrassegnato con l'attributo ComSourceInterfacesAttribute e almeno un'interfaccia specificata non è contrassegnata con l'attributo InterfaceTypeAttribute impostato sul InterfaceIsDispatch valore.

Descrizione regola

ComSourceInterfacesAttribute viene usato per identificare le interfacce evento esposte da una classe ai client COM (Component Object Model). Queste interfacce devono essere esposte per InterfaceIsIDispatch consentire ai client COM di Visual Basic 6 di ricevere notifiche degli eventi. Per impostazione predefinita, se un'interfaccia non è contrassegnata con l'attributo InterfaceTypeAttribute , viene esposta come interfaccia doppia.

Come correggere le violazioni

Per correggere una violazione di questa regola, aggiungere o modificare l'attributo InterfaceTypeAttribute in modo che il relativo valore sia impostato su InterfaceIsIDispatch per tutte le interfacce specificate con l'attributo ComSourceInterfacesAttribute .

Quando eliminare gli avvisi

Non escludere un avviso da questa regola.

Esempio

L'esempio seguente mostra una classe in cui una delle interfacce viola la regola.

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: Non usare AutoDual ClassInterfaceType

Vedi anche