2012-01-03 35 views
6

我想弄清楚为什么这个属性被添加到一个类。 Google在搜索时只会提供与COM相关的资料;但应用程序不会通过COM做任何事情。是System.Runtime.InteropServices.GuidAttribute用于除COM互操作外的任何东西

checkin评论并没有提供任何启示(它指的是其他的,看似不相关的更改在同一时间);在更改的任何一方都没有看到我的电子邮件流量好几天。

+0

这只是元数据。 CLR将它用于COM Interop;但你可以像任何其他属性一样将它用于自己的目的(尽管我会建议创建自己的属性)。 – vcsjones 2012-01-03 21:39:00

回答

5

无论您是否使用该属性,.NET中的某个类型始终有一个Guid。通过Type.GUID属性可用。 CLR自动从类型定义中生成一个,确保相同的类型具有相同的Guid,而不管它生成的机器是什么。请注意,这与生成Guid的常用方式的行为非常不同。

如果您想覆盖自动生成的guid,则只使用[Guid]属性。这只在COM互操作场景中有用才能获得与现有COM接口或coclass匹配的声明。它应该总是靠近[ComVisible]或[ComImport]属性。

1

Guid属性是为COM互操作引入的 - 但没有什么能够阻止您(或任何其他第三方)将其用于其他用途。

属性一般会提供其他代码可以使用的附加信息(“元数据”),但是适合。

+0

正确;但如果我滥用了它的目的用途之外,我几乎肯定会留下一段文字,解释为什么我会在源代码或签入评论中做这件事。我的怀疑是从错误的开始,这是一些未删除的垃圾代码。我想确保没有任何其他合法用途需要先排除该属性。 – 2012-01-03 22:00:13