Klasa COM — Przykład (Przewodnik programowania w języku C#)Example COM Class (C# Programming Guide)

Poniżej znajduje się przykład klasy, którą można uwidocznić jako obiekt COM.The following is an example of a class that you would expose as a COM object. Gdy ten kod został umieszczony w pliku CS i dodany do projektu, ustaw właściwość Register for com Interop na wartość true.After this code has been placed in a .cs file and added to your project, set the Register for COM Interop property to True. Aby uzyskać więcej informacji, zobacz jak: Zarejestruj składnik dla współdziałaniaz modelem com.For more information, see How to: Register a Component for COM Interop.

Uwidacznianie C# obiektów wizualnych do modelu COM wymaga zadeklarowania interfejsu klasy, interfejsu zdarzeń, jeśli jest to wymagane, i samej klasy.Exposing Visual C# objects to COM requires declaring a class interface, an events interface if it is required, and the class itself. Elementy członkowskie klasy muszą być zgodne z tymi regułami, aby były widoczne dla modelu COM:Class members must follow these rules to be visible to COM:

  • Klasa musi być publiczna.The class must be public.

  • Właściwości, metody i zdarzenia muszą być publiczne.Properties, methods, and events must be public.

  • Właściwości i metody muszą być zadeklarowane w interfejsie klasy.Properties and methods must be declared on the class interface.

  • Zdarzenia muszą być zadeklarowane w interfejsie zdarzenia.Events must be declared in the event interface.

Inne publiczne elementy członkowskie klasy, które nie są zadeklarowane w tych interfejsach, nie będą widoczne dla modelu COM, ale będą widoczne dla innych obiektów .NET Framework.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.

Aby uwidocznić właściwości i metody modelu COM, należy zadeklarować je w interfejsie klasy i oznaczyć je DispId atrybutami i zaimplementować je w klasie.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. Kolejność, w której elementy członkowskie są zadeklarowane w interfejsie, jest kolejnością używaną w przypadku tablic wirtualnych COM.The order in which the members are declared in the interface is the order used for the COM vtable.

Aby uwidocznić zdarzenia z klasy, należy je zadeklarować w interfejsie zdarzeń i oznaczyć je DispId atrybutami.To expose events from your class, you must declare them on the events interface and mark them with a DispId attribute. Klasa nie powinna implementować tego interfejsu.The class should not implement this interface.

Klasa implementuje interfejs klasy; może zaimplementować więcej niż jeden interfejs, ale Pierwsza implementacja będzie domyślnym interfejsem klasy.The class implements the class interface; it can implement more than one interface, but the first implementation will be the default class interface. W tym miejscu Zaimplementuj metody i właściwości uwidocznione w modelu COM.Implement the methods and properties exposed to COM here. Muszą być oznaczone jako publiczne i muszą być zgodne z deklaracjami w interfejsie klasy.They must be marked public and must match the declarations in the class interface. Ponadto w tym miejscu Zadeklaruj zdarzenia zgłoszone przez klasę.Also, declare the events raised by the class here. Muszą być oznaczone jako publiczne i muszą być zgodne z deklaracjami w interfejsie zdarzeń.They must be marked public and must match the declarations in the events interface.

PrzykładExample

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

Zobacz takżeSee also