Пример COM-класса (Руководство по программированию на C#)Example COM Class (C# Programming Guide)

Далее приведен пример класса, который можно предоставить в качестве COM-объекта.The following is an example of a class that you would expose as a COM object. После помещения этого кода в CS-файл и добавления в проект свойства Регистрация для COM-взаимодействия необходимо присвоить значение Истина.After this code has been placed in a .cs file and added to your project, set the Register for COM Interop property to True. Дополнительные сведения см. в разделе Как Register a Component for COM Interop (Практическое руководство. Регистрация компонента для COM-взаимодействия).For more information, see How to: Register a Component for COM Interop.

Предоставление объектов Visual C# для COM требует объявления интерфейса класса, интерфейса событий (если необходимо) и самого класса.Exposing Visual C# objects to COM requires declaring a class interface, an events interface if it is required, and the class itself. Члены класса должны соответствовать указанным ниже правилам, чтобы стать доступными для COM.Class members must follow these rules to be visible to COM:

  • Класс должен быть открытым.The class must be public.

  • Свойства, методы и события должны быть открытыми.Properties, methods, and events must be public.

  • Свойства и методы должны быть объявлены в интерфейсе класса.Properties and methods must be declared on the class interface.

  • События должны быть объявлены в интерфейсе событий.Events must be declared in the event interface.

Другие открытые члены в классе, которые не объявлены в этих интерфейсах, не будут доступны для COM, но будут доступны другим объектам .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.

Чтобы предоставить свойства и методы COM, их необходимо объявить в интерфейсе класса, пометить атрибутом DispId и реализовать в классе.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. Порядок объявления членов в интерфейсе — это порядок, используемый для виртуальной таблицы COM.The order in which the members are declared in the interface is the order used for the COM vtable.

Чтобы предоставить события из класса, их необходимо объявить в интерфейсе событий и пометить атрибутом DispId.To expose events from your class, you must declare them on the events interface and mark them with a DispId attribute. Класс не должен реализовывать этот интерфейс.The class should not implement this interface.

Класс реализует интерфейс класса; он может реализовывать несколько интерфейсов, но первой реализацией будет интерфейс класса по умолчанию.The class implements the class interface; it can implement more than one interface, but the first implementation will be the default class interface. Реализуйте методы и свойства, доступные модели COM здесь.Implement the methods and properties exposed to COM here. Они должны быть помечены как открытые и соответствовать объявлениям в интерфейсе класса.They must be marked public and must match the declarations in the class interface. Кроме того, объявите здесь события, инициируемые классом.Also, declare the events raised by the class here. Они должны быть помечены как открытые и соответствовать объявлениям в интерфейсе событий.They must be marked public and must match the declarations in the events interface.

ПримерExample

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

См. такжеSee also