Esempio di classe COM (Guida per programmatori C#)

Di seguito è riportato un esempio di una classe esposta come oggetto COM.Dopo aver inserito questo codice in un file CS e averlo aggiunto al progetto, impostare la proprietà Registra per interoperabilità COM su True.Per ulteriori informazioni, vedere How to: Register a Component for COM Interop.

Per esporre gli oggetti Visual C# a COM, è necessario dichiarare un'interfaccia di classe, un'interfaccia di eventi se richiesta, nonché la classe stessa.Per essere visibili a COM è necessario che i membri di classe rispettino le seguenti regole:

  • La classe deve essere pubblica.

  • Le proprietà, i metodi e gli eventi devono essere pubblici.

  • Le proprietà e i metodi devono essere dichiarati nell'interfaccia di classe.

  • Gli eventi devono essere dichiarati nella relativa interfaccia.

Gli altri membri pubblici della classe non dichiarati in queste interfacce non saranno visibili a COM, ma ad altri oggetti di .NET Framework.

Per esporre le proprietà e i metodi a COM, è necessario dichiararli nell'interfaccia di classe e contrassegnarli con un attributo DispId, nonché implementarli nella classe stessa.L'ordine con cui i membri vengono dichiarati nell'interfaccia è quello utilizzato per la vtable COM.

Per esporre gli eventi dalla classe, è necessario dichiararli nell'interfaccia degli eventi e contrassegnarli con un attributo DispId.È opportuno che la classe non implementi questa interfaccia.

È invece necessario che la classe implementi l'interfaccia di classe. La classe è in grado di implementare più di un'interfaccia, ma la prima implementazione sarà quella dell'interfaccia di classe predefinita.Implementare i metodi e le proprietà esposte a COM,che devono essere contrassegnati come pubblici e corrispondere alle dichiarazioni presenti nell'interfaccia della classe.Dichiarare, inoltre, gli eventi originati dalla classe,che devono a loro volta essere contrassegnati come pubblici e corrispondere alle dichiarazioni presenti nell'interfaccia degli eventi.

Esempio

using System.Runtime.InteropServices;

namespace project_name
{
    [Guid("EAA4976A-45C3-4BC5-BC0B-E474F4C3C83F")]
    public interface ComClass1Interface
    {
    }

    [Guid("7BD20046-DF8C-44A6-8F6B-687FAA26FA71"), 
        InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface ComClass1Events 
    {
    }

    [Guid("0D53A3E8-E51A-49C7-944E-E72A2064F938"),
        ClassInterface(ClassInterfaceType.None),
        ComSourceInterfaces(typeof(ComClass1Events))]
    public class ComClass1 : ComClass1Interface
    {
    }
}

Vedere anche

Riferimenti

Interoperabilità (Guida per programmatori C#)

Pagina Compilazione, Progettazione progetti (C#)

Concetti

Guida per programmatori C#