COM-Beispielklasse (C#-Programmierhandbuch)Example COM Class (C# Programming Guide)

Das Folgende ist ein Beispiel für eine Klasse, die Sie als COM-Objekt offenlegen würden.The following is an example of a class that you would expose as a COM object. Nachdem dieser Code in eine CS-Datei platziert und Ihrem Projekt hinzugefügt wurde, legen Sie die Eigenschaft für COM-Interop registrieren auf TRUE fest.After this code has been placed in a .cs file and added to your project, set the Register for COM Interop property to True. Weitere Informationen finden Sie unter Vorgehensweise: Registrieren einer Komponente für COM-Interop.For more information, see NIB: How to: Register a Component for COM Interop.

Das Verfügbarmachen von Visual C#-Objekten für COM erfordert die Deklaration einer Klassenschnittstelle, einer Ereignisschnittstelle (wenn dies erforderlich ist) und die Klasse selbst.Exposing Visual C# objects to COM requires declaring a class interface, an events interface if it is required, and the class itself. Klassenmember müssen diesen Regeln folgen, um für COM sichtbar zu sein:Class members must follow these rules to be visible to COM:

  • Die Klasse muss öffentlich sein.The class must be public.

  • Eigenschaften, Methoden und Ereignisse müssen öffentlich sein.Properties, methods, and events must be public.

  • Eigenschaften und Methoden müssen auf der Klassenschnittstelle deklariert werden.Properties and methods must be declared on the class interface.

  • Ereignisse müssen in der Ereignisschnittstelle deklariert werden.Events must be declared in the event interface.

Andere öffentliche Member in der Klasse, die nicht in diesen Schnittstellen deklariert sind, werden für COM nicht sichtbar sein, aber für andere .NET Framework-Objekte werden sie sichtbar sein.Other public members in the class that are not declared in these interfaces will not be visible to COM, but they will be visible to other .NET Framework objects.

Um Eigenschaften und Methoden für COM verfügbar zu machen, müssen Sie diese auf der Klassenschnittstelle deklarieren, sie mit einem DispId-Attribut markieren und sie in der Klasse implementieren.To expose properties and methods to COM, you must declare them on the class interface and mark them with a DispId attribute, and implement them in the class. Die Reihenfolge, in der die Elemente in der Schnittstelle deklariert werden, ist die für die COM-Vtable verwendete Reihenfolge.The order in which the members are declared in the interface is the order used for the COM vtable.

Um Ereignisse aus Ihrer Klasse verfügbar zu machen, müssen Sie diese auf der Ereignisschnittstelle deklarieren und sie mit einem DispId-Attribut markieren.To expose events from your class, you must declare them on the events interface and mark them with a DispId attribute. Die Klasse sollte diese Schnittstelle nicht implementieren.The class should not implement this interface.

Die Klasse implementiert die Klassenschnittstelle. Es kann mehr als eine Schnittstelle implementieren, aber die erste Implementierung ist die Standard-Klassenschnittstelle.The class implements the class interface; it can implement more than one interface, but the first implementation will be the default class interface. Implementieren Sie die Methoden und Eigenschaften hier, die Sie für COM verfügbar gemacht haben.Implement the methods and properties exposed to COM here. Sie müssen als öffentlich markiert sein und den Deklarationen in der Klassenschnittstelle entsprechen.They must be marked public and must match the declarations in the class interface. Deklarieren Sie außerdem die von der Klasse hier ausgelösten Ereignisse.Also, declare the events raised by the class here. Sie müssen als öffentlich markiert sein und den Deklarationen in der Klassenschnittstelle entsprechen.They must be marked public and must match the declarations in the events interface.

BeispielExample

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
    {
    }
}

Siehe auchSee Also

C#-ProgrammierhandbuchC# Programming Guide
InteroperabilitätInteroperability
Seite „Erstellen“, Projekt-Designer (C#)Build Page, Project Designer (C#)