VB.NET会自动生成ComClass属性和guids吗?

时间:2009-04-27 19:27:58

标签: vb.net com

我遇到了一些显式创建三个GUID常量的VB.NET代码,并在类的ComClass属性中使用它们。我过去只是通过检查项目选项中的“Make COM-Visible”和“Register for COM interop”选项编写了COM-aware类。这个显式代码是不必要的,还是它做了超出这两个选项的工作?这是一个片段:

<ComClass(MenuHandler.ClassId, MenuHandler.InterfaceId, MenuHandler.EventsId)> _
Public Class MenuHandler
    Public Const ClassId As String = "A2204623-A902-44d4-B524-FDFFCD176E53"
    Public Const InterfaceId As String = "3449CA8B-16DF-4a61-8BAB-DFF27AE70F5E"
    Public Const EventsId As String = "06C156DD-0ABA-437e-9EE0-C1CE2CA34033"
End Class

3 个答案:

答案 0 :(得分:2)

通过在要暴露的类和枚举上显式放置属性,可以防止不应公开的辅助类,内部工具或内部类等内容。这是Microsoft推荐的方式......当他们推荐某些东西时,通常意味着如果你不这样做,你的程序将来可能会中断。 :)

检查“使COM可见”和“注册COM互操作”是制作COM可见对象的简单方法,但不建议这样做。这将增加每个可见类的开销 - 即使是你可能不想要的类。

答案 1 :(得分:2)

ComClass属性特定于Visual Basic,旨在简化.Net代码中COM对象的创建。当编译器看到这个属性时,它会做一些必须在C#中手动完成的繁琐工作。总之,它是Visual Basic代码创建COM对象的快捷方式。

这是一篇很棒的文章,介绍了它在C#中做了同样的事情:

答案 2 :(得分:2)

  

VB.NET会自动生成ComClass属性和guids吗?

是的,如果您使用VB.NET COMClass模板创建一个类,将自动生成COMClassAttribute和那些GUID。

Detail in MSDN “使用COM类模板创建COM对象”部分