Где находится "Inherits <baseclass>" в пользовательском контроле Interop? - PullRequest
1 голос
/ 06 января 2010

Я смотрю на механизм Interop UserControl, который является частью "Interop Forms Toolkit" версии 2.0. (Это необходимо для создания .Net UserControl, который можно публиковать в виде COM-объекта для использования в формах VB6.)

Я начал новый проект с использованием шаблона "VB6 Interop UserControl", и я вижу определение класса, которое выглядит следующим образом:

    <ComClass(InteropUserControl.ClassId, InteropUserControl.InterfaceId,       
        InteropUserControl.EventsId)> _
    Public Class InteropUserControl

  + VB6 Interop Code

        'Please enter any new code here, below the Interop code

    End Class

без какого-либо утверждения "Наследует". Но если я загляну в Class Browser, то увижу, что этот класс (что не удивительно) наследует класс WinForms UserControl. Как может быть так, что фрагмент "Inherits UserControl" объявления класса нигде не виден?

Вопрос 634559 также показывает объявление класса InteropUserControl без какого-либо оператора «наследует UserControl». Я должен упустить что-то простое из моих знаний VB.Net. (Я делаю большую часть своей работы .Net в C #.)

Любая помощь в понимании этого будет оценена.

Ответы [ 2 ]

0 голосов
/ 25 января 2010

Компилятор VB.Net добавляет Inherits UserControl автоматически. Посмотрите на ваш класс, используя Reflector , чтобы увидеть это. В дополнение к этому, он добавляет Implements _InteropUserControl. Поэтому, когда вы пишете свой класс так:

<ComClass(InteropUserControl.ClassId, InteropUserControl.InterfaceId,
    InteropUserControl.EventsId)> _
Public Class InteropUserControl

    ...

В Reflector это будет выглядеть примерно так:

<DesignerGenerated(), ComClass("a2ee6169-9a0d-4930-b8bb-ee71307c43b3",
    "75ff3d57-6448-40ac-a294-68252180cacd", "2b04895c-43f8-44b3-b187-00556ef53a6a"),
    Guid("a2ee6169-9a0d-4930-b8bb-ee71307c43b3"),
    ClassInterface(ClassInterfaceType.None),
    ComSourceInterfaces("VBControl.InteropUserControl+__InteropUserControl")> _
Public Class InteropUserControl
    Inherits UserControl
    Implements _InteropUserControl

    ...
0 голосов
/ 06 января 2010

Я считаю, что действует как сигнал компилятору для добавления некоторых интерфейсов.

Я нашел один источник для такого поведения.

Возможно, что подобная перезапись происходит для Inherits в этом случае.

...