CA1412: marcar interfaces ComSource como IDispatch
TypeName |
MarkComSourceInterfacesAsIDispatch |
CheckId |
CA1412 |
Categoria |
Microsoft.Interoperability |
Alteração Significativa |
Quebra |
Causa
Um tipo é marcado com o atributo de ComSourceInterfacesAttribute e pelo menos uma interface especificada não é marcada com o conjunto de atributos de InterfaceTypeAttribute ao valor de InterfaceIsDispatch .
Descrição da Regra
ComSourceInterfacesAttribute é usado para identificar as interfaces de evento que uma classe expõe ao Component Object Model (COM) clientes.Essas interfaces devem ser expostos como InterfaceIsIDispatch para permitir que os clientes do Visual Basic 6 COM para receber notificações de eventos.Por padrão, se uma interface não é marcada com o atributo de InterfaceTypeAttribute , é exposto como uma interface dupla.
Como Corrigir Violações
Para corrigir uma violação desta regra, adicionar ou alterar o atributo de InterfaceTypeAttribute de modo que seu valor é definido como InterfaceIsIDispatch para todas as interfaces que são especificadas com o atributo de ComSourceInterfacesAttribute .
Quando Suprimir Alertas
Não elimine um alerta desta regra.
Exemplo
O exemplo a seguir mostra uma classe em 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 usar AutoDual ClassInterfaceType
Consulte também
Tarefas
Como acionar eventos manipulados por um coletor COM