CA1412: Interfaces de marca ComSource como IDispatch
TypeName |
MarkComSourceInterfacesAsIDispatch |
CheckId |
CA1412 |
<strong>Categoria</strong> |
Microsoft.Interoperability |
Alteração significativa |
Quebrando |
Causa
Um tipo é marcado com o ComSourceInterfacesAttribute atributo e pelo menos uma interface especificada não está marcado com o InterfaceTypeAttribute atributo definido como o InterfaceIsDispatch valor.
Descrição da regra
ComSourceInterfacesAttributeé usado para identificar as interfaces de evento que uma classe expõe aos clientes do modelo de objeto componente (COM). Essas interfaces devem ser expostas como InterfaceIsIDispatch para permitir que clientes COM 6 de Visual Basic receber notificações de evento. Por padrão, se uma interface não está marcada com o InterfaceTypeAttribute atributo, ele é exposto como uma interface dupla.
Como corrigir violações
Para corrigir uma violação desta regra, adicionar ou modificar o InterfaceTypeAttribute de atributo para que seu valor é definido para InterfaceIsIDispatch para todas as interfaces que são especificadas com o ComSourceInterfacesAttribute atributo.
Quando suprimir avisos
Não suprimir um aviso da regra.
Exemplo
O exemplo a seguir mostra uma classe onde uma das interfaces viola a regra.
Imports Microsoft.VisualBasic
Imports System
Imports System.Runtime.InteropServices
<Assembly: ComVisibleAttribute(True)>
Namespace InteroperabilityLibrary
' This violates the rule for type EventSource.
<InterfaceType(ComInterfaceType.InterfaceIsDual)> _
Public Interface IEventsInterface
Sub EventOne
Sub EventTwo
End Interface
' This satisfies the rule.
<InterfaceType(ComInterfaceType.InterfaceIsIDispatch)> _
Public Interface IMoreEventsInterface
Sub EventThree
Sub EventFour
End Interface
<ComSourceInterfaces( _
"InteroperabilityLibrary.IEventsInterface" & _
ControlChars.NullChar & _
"InteroperabilityLibrary.IMoreEventsInterface")> _
Public Class EventSource
' Event and method declarations.
End Class
End Namespace
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.
}
}
Regras relacionadas
CA1408: Não use ClassInterfaceType de AutoDual
Consulte também
Tarefas
Como: Gerar eventos manipulados por um coletor COM