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.
}
}
Regras relacionadas
CA1408: Não usar AutoDual ClassInterfaceType
Confira também
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de