CA1412: Contrassegnare le interfacce ComSource come IDispatch
TypeName |
MarkComSourceInterfacesAsIDispatch |
CheckId |
CA1412 |
Category |
Microsoft.Interoperability |
Breaking Change |
Breaking |
Causa
Un tipo è contrassegnato con l'attributo ComSourceInterfacesAttribute e almeno una delle interfacce specificate non è contrassegnata con l'attributo InterfaceTypeAttribute impostato sul valore di InterfaceIsDispatch.
Descrizione della regola
L'oggetto ComSourceInterfacesAttribute consente di identificare le interfacce di eventi che una classe espone ai client COM (Component Object Model). Tali interfacce devono essere esposte come InterfaceIsIDispatch per consentire ai client COM di Visual Basic 6 di ricevere notifiche di eventi. Per impostazione predefinita, se un'interfaccia non viene contrassegnata dall'attributo InterfaceTypeAttribute, essa viene esposta come interfaccia duale.
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.
Esclusione di avvisi
Non escludere un avviso da questa regola.
Esempio
Nell'esempio illustrato di seguito viene visualizzata una classe in cui una delle interfacce viola la regola.
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.
}
}
Regole correlate
CA1408: Non utilizzare AutoDual ClassInterfaceType
Vedere anche
Attività
Procedura: generare eventi gestiti da un sink COM