Sdílet prostřednictvím


Ukázka třídy COM

Následující kód je příkladem třídy, kterou byste zpřístupnili jako objekt COM. Po umístění tohoto kódu do souboru .cs přidaného do projektu nastavte vlastnost Register for COM Interop vlastnost True. Další informace naleznete v tématu Postupy: Registrace komponenty pro zprostředkovatele komunikace modelu COM.

Vystavení objektů C# modelu COM vyžaduje deklarování rozhraní třídy, "rozhraní událostí" v případě potřeby a samotnou třídu. Členové třídy musí dodržovat tato pravidla, aby se zobrazovala modelu COM:

  • Třída musí být veřejná.
  • Vlastnosti, metody a události musí být veřejné.
  • Vlastnosti a metody musí být deklarovány v rozhraní třídy.
  • Události musí být deklarovány v rozhraní událostí.

Ostatní veřejné členy třídy, které v těchto rozhraních deklarujete, nejsou viditelné pro objekty COM, ale jsou viditelné pro jiné objekty .NET. Chcete-li vystavit vlastnosti a metody modelu COM, musíte je deklarovat v rozhraní třídy a označit je atributem DispId a implementovat je ve třídě. Pořadí, ve kterém deklarujete členy v rozhraní, je pořadí použité pro vtable modelu COM. Pokud chcete zpřístupnit události z vaší třídy, musíte je deklarovat v rozhraní událostí a označit je atributem DispId . Třída by neměla implementovat toto rozhraní.

Třída implementuje rozhraní třídy; může implementovat více než jedno rozhraní, ale první implementace je výchozí rozhraní třídy. Zde implementujte metody a vlastnosti vystavené modelu COM. Musí být veřejné a musí odpovídat deklaracím v rozhraní třídy. Deklarujte také události vyvolané třídou zde. Musí být veřejné a musí odpovídat deklaracím v rozhraní událostí.

Příklad

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

Viz také