Поделиться через


ClassInterfaceType Перечисление

Определение

Указывает, какой тип интерфейса генерируется для класса.

public enum class ClassInterfaceType
public enum ClassInterfaceType
[System.Serializable]
public enum ClassInterfaceType
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public enum ClassInterfaceType
type ClassInterfaceType = 
[<System.Serializable>]
type ClassInterfaceType = 
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type ClassInterfaceType = 
Public Enum ClassInterfaceType
Наследование
ClassInterfaceType
Атрибуты

Поля

AutoDispatch 1

Указывает, что класс поддерживает только позднее связывание для клиентов COM. Интерфейс dispinterface класса автоматически предоставляется клиентам COM по запросу. Библиотека типов, созданная программой Tlbexp.exe (программа экспорта библиотек типов), не содержит информации о типе для интерфейса dispinterface, чтобы не допустить кэширование значений DISPID клиентами. Интерфейс dispinterface исключает возникновение проблем с версиями, рассмотренных в описании класса ClassInterfaceAttribute, поскольку клиенты могут использовать только позднее связывание с интерфейсом.

Это параметр по умолчанию для ClassInterfaceAttribute.

AutoDual 2

Указывает, что для класса автоматически создается сдвоенный интерфейс класса, который предоставляется COM. Сведения о типе создаются для класса интерфейса и публикуются в библиотеке типов. Использование AutoDual крайне нежелательно из-за ограничений, связанных с версиями и описанных для атрибута ClassInterfaceAttribute.

None 0

Указывает, что для класса не создается интерфейса класса. Если интерфейсы не реализованы явно, класс может предоставить доступ только через позднее связывание при помощи интерфейса IDispatch. Это значение является рекомендованным для ClassInterfaceAttribute. Использование ClassInterfaceType.None — это единственный способ предоставления функциональных возможностей при помощи интерфейсов, явно реализованных классом.

Программа Tlbexp.exe (средство экспорта библиотек типов) предоставляет первый открытый интерфейс, видимый для COM и реализуемый классом в качестве интерфейса по умолчанию для кокласса. В .NET Framework 2.0 и более поздних версиях можно указать интерфейс по умолчанию, предоставляемый для COM, с помощью атрибута ComDefaultInterfaceAttribute. Если класс не реализует интерфейсы, то в качестве интерфейса по умолчанию используется первый открытый интерфейс, видимый для COM и реализуемый базовым классом (начиная с последнего производного базового класса и продвигаясь в обратном порядке). Программа Tlbexp.exe предоставляет _Object как интерфейс по умолчанию, если ни класс, ни его базовые классы не реализуют интерфейсы.

Примеры

В этом примере показано, как применить ClassInterfaceAttribute к типу , задав .ClassInterfaceType Классы, определенные таким образом, можно использовать из неуправляемого COM.

using namespace System;
using namespace System::Runtime::InteropServices;

// Have the CLR expose a class interface (derived from IDispatch)
// for this type. COM clients can call the  members of this
// class using the Invoke method from the IDispatch interface.
[ClassInterface(ClassInterfaceType::AutoDispatch)]
public ref class AClassUsableViaCOM
{
public:
    AClassUsableViaCOM() 
    { 
    }

public:
    int Add(int x, int y)
    {
        return x + y;
    }
};

// The CLR does not expose a class interface for this type.
// COM clients can call the members of this class using
// the methods from the IComparable interface.
[ClassInterface(ClassInterfaceType::None)]
public ref class AnotherClassUsableViaCOM : public IComparable
{
public:
    AnotherClassUsableViaCOM() 
    { 
    }

    virtual int CompareTo(Object^ o) = IComparable::CompareTo
    {
        return 0;
    }
};
using System;
using System.Runtime.InteropServices;

// Have the CLR expose a class interface (derived from IDispatch) for this type.
// COM clients can call the  members of this class using the Invoke method from the IDispatch interface.
[ClassInterface(ClassInterfaceType.AutoDispatch)]
public class AClassUsableViaCOM
{
    public AClassUsableViaCOM() { }

    public Int32 Add(Int32 x, Int32 y) { return x + y; }
}

// The CLR does not expose a class interface for this type.
// COM clients can call the members of this class using the methods from the IComparable interface.
[ClassInterface(ClassInterfaceType.None)]
public class AnotherClassUsableViaCOM : IComparable
{
    public AnotherClassUsableViaCOM() { }

    Int32 IComparable.CompareTo(Object o) { return 0; }
}
Imports System.Runtime.InteropServices


' Have the CLR expose a class interface (derived from IDispatch) for this type.
' COM clients can call the  members of this class using the Invoke method from the IDispatch interface.
<ClassInterface(ClassInterfaceType.AutoDispatch)> _
Public Class AClassUsableViaCOM

    Public Sub New()

    End Sub

    Public Function Add(ByVal x As Int32, ByVal y As Int32) As Int32
        Return x + y

    End Function
End Class
' The CLR does not expose a class interface for this type.
' COM clients can call the members of this class using the methods from the IComparable interface.
<ClassInterface(ClassInterfaceType.None)> _
Public Class AnotherClassUsableViaCOM
    Implements IComparable

    Public Sub New()

    End Sub

    Function CompareTo(ByVal o As [Object]) As Int32 Implements IComparable.CompareTo
        Return 0

    End Function 'IComparable.CompareTo
End Class

Комментарии

Это перечисление используется в сочетании с атрибутом ClassInterfaceAttribute .

Применяется к

См. также раздел