Vb.net “在哪里?”;继承<;基类>&引用;在互操作用户控件中?

Vb.net “在哪里?”;继承<;基类>&引用;在互操作用户控件中?,vb.net,inheritance,com-interop,Vb.net,Inheritance,Com Interop,我正在研究InteropUserControl机制,它是“InteropFormsToolkit”2.0版的一部分。(这将帮助您构建一个.Net UserControl,该控件可以作为COM对象发布,以便在VB6窗体上使用。) 我使用“VB6 Interop UserControl”模板启动了一个新项目,我看到的是一个类定义,如下所示: <ComClass(InteropUserControl.ClassId, InteropUserControl.InterfaceId,

我正在研究InteropUserControl机制,它是“InteropFormsToolkit”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
<ComClass(InteropUserControl.ClassId, InteropUserControl.InterfaceId,
    InteropUserControl.EventsId)> _
Public Class InteropUserControl

    ...
_
公共类互操作控制
+VB6互操作代码
'请在此处的互操作代码下方输入任何新代码
末级
没有任何“继承”语句。但是如果我查看类浏览器,我可以看到这个类(毫不奇怪)继承自WinForms UserControl类。类声明的“Inherits UserControl”部分怎么可能在任何地方都不可见

问题634559还显示了一个InteropUserControl类声明,没有任何“inherits UserControl”语句。我一定是从我的VB.Net知识中遗漏了一些简单的东西。(我大部分.Net工作都是用C#完成的。)

如果您能帮助理解这一点,我们将不胜感激。

我相信这将作为编译器添加一些接口的信号


在这种情况下,可能会对继承进行类似的重写。

VB.Net编译器会自动添加
继承用户控件。看一看你的班级,用以了解这一点。除此之外,它还添加了
实现_InteropUserControl
。因此,当您这样编写类时:

    <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
<ComClass(InteropUserControl.ClassId, InteropUserControl.InterfaceId,
    InteropUserControl.EventsId)> _
Public Class InteropUserControl

    ...
_
公共类互操作控制
...
在反射器中会出现类似这样的情况:

<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

    ...
_
公共类互操作控制
继承用户控件
实现互操作控制
...

我阅读了引用的文章,虽然这些信息很有趣,并且与我正在做的事情相关,但没有任何信息表明属性可以更改属性所在类的基类。我仍然在想,一个类定义怎么可能不包含一个“inherits”子句,但是系统仍然神秘地找出了基类。很明显,有些地方正在重写以添加一个inherits子句,即使它从未出现在源代码中。这篇文章表明,这种响应属性的行为并不是前所未有的,尽管确切的行为(添加
Implements
子句)与您的情况不同。“重写”正是所有属性所做的,因为它们会改变生成的代码/IL。我可以说这是在幕后发生的。我想回答的问题是,是什么让VB.Net编译器这么做的?奇怪的是,新类应该从UserControl(并实现_InteropUserControl)派生出来的指示似乎是完全看不见的。你是什么意思?属性本身告诉编译器添加该属性。就像编写公共类告诉编译器一些事情一样,属性也告诉编译器一些事情。