Przykładowa klasa modelu COM

Poniższy kod jest przykładem klasy, którą można uwidocznić jako obiekt COM. Po wprowadzeniu tego kodu w pliku .cs dodanym do projektu ustaw właściwość Register for COM Interop na True. Aby uzyskać więcej informacji, zobacz How to: Register a Component for COM Interop (Jak zarejestrować składnik dla międzyoperacjności modelu COM).

Uwidacznianie obiektów języka C# w modelu COM wymaga deklarowania interfejsu klasy, interfejsu "zdarzeń" w razie potrzeby i samej klasy. Składowe klasy muszą być zgodne z tymi regułami, aby były widoczne dla modelu COM:

  • Klasa musi być publiczna.
  • Właściwości, metody i zdarzenia muszą być publiczne.
  • Właściwości i metody należy zadeklarować w interfejsie klasy.
  • Zdarzenia muszą być zadeklarowane w interfejsie zdarzenia.

Inne publiczne elementy członkowskie w klasie, których nie deklarujesz w tych interfejsach, nie są widoczne dla modelu COM, ale są one widoczne dla innych obiektów platformy .NET. Aby uwidocznić właściwości i metody modelu COM, należy zadeklarować je w interfejsie klasy i oznaczyć je atrybutem DispId i zaimplementować je w klasie. Kolejność deklarowania elementów członkowskich w interfejsie jest kolejnością używaną dla tabeli wirtualnej COM. Aby uwidocznić zdarzenia z klasy, należy je zadeklarować w interfejsie zdarzeń i oznaczyć je atrybutem DispId . Klasa nie powinna implementować tego interfejsu.

Klasa implementuje interfejs klasy; Może zaimplementować więcej niż jeden interfejs, ale pierwsza implementacja jest domyślnym interfejsem klasy. Tutaj zaimplementuj metody i właściwości uwidocznione w modelu COM. Muszą być publiczne i muszą być zgodne z deklaracjami w interfejsie klasy. Ponadto zadeklaruj zdarzenia zgłoszone przez klasę tutaj. Muszą być publiczne i muszą być zgodne z deklaracjami w interfejsie zdarzeń.

Przykład

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 też