在C#中,出现在类上方的Guid属性是什么?

19

最近我学习了一些C#代码,其中一个类上面有一个Guid属性。我不明白这是什么或者它用来做什么。

请问有人能给我简单介绍一下它的作用,或者指出一些提供更多信息的文章吗?

谢谢!


2
它看起来像这样吗?http://msdn.microsoft.com/zh-cn/library/system.runtime.interopservices.guidattribute.aspx - Tx3
是的,看起来是这样的。Guid和GuidAttribute有区别吗? - Alex
3
使用 "[]" 应用属性时,可以省略类型名称末尾的 "Attribute"。它会默认存在,因此它们是相同的。 - Rangoric
3个回答

11

这是代表相应类的COM标识符。该类旨在进行COM互操作。


10
你可能想要查看ComVisibleAttribute类,了解如何将托管类提供给非托管代码。
[Guid]与.NET Type.AssemblyQualifiedName是完全等效的。
System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5561934e089

明显的区别在于,.NET类型名称更容易被人类读取。程序需要能够发现加载类型所需的DLL。在.NET情况下,程序集(通常)是通过枚举GAC来找到的。它是基于文件的。

COM使用注册表。在你查看源代码的那个程序集构建并注册后,你可以在注册表中找回[Guid]。启动 regedit.exe 并导航到 HKLM\Software\Classes\CLSID\{guid}。您将看到运行时用于加载CLR和程序集的注册键值。


我目前正在尝试将我的.NET类公开为COM,并已注册我的程序集。你能解释一下为什么我在GuidAttribute中指定的GUID不会出现在HKLM\Software\Classes\CLSID\中吗? - Dave
看错地方是典型的解释。比如HKLM\Software\Wow6432Node\Classes\CLSID,这是32位COM服务器的主目录。 - Hans Passant

9

GUID(全局唯一标识符)用于外界识别您的组件。当您编写一个将作为COM(Component Object Model)使用的项目时,您必须提供一个唯一的名称。因此,您需要应用GUID属性。

您可以在此处阅读更多信息。

GUIDAttributeClass


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接