Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is System.Runtime.InteropServices.GuidAttribute used for anything except COM interop

Tags:

c#

attributes

I'm trying to figure out why this attribute was added to a class. Google is only turning up COM related material when I search for it; but the application doesn't do anything via COM.

The checkin comment doesn't provide any enlightenment (it referred to the other, seemingly non-related changes made at the same time); nor did reading my email traffic for several days on either side of the change.

like image 320
Dan Is Fiddling By Firelight Avatar asked Jan 03 '12 21:01

Dan Is Fiddling By Firelight


2 Answers

A type in .NET always has a Guid whether you use the attribute or not. Available through the Type.GUID property. The CLR auto-generates one from the type definition, ensuring that identical types have identical Guids regardless on what machine it gets generated. Note that this is very different behavior from the usual way a Guid is generated.

You only use the [Guid] attribute if you want to override the auto-generated guid. Which is only useful in COM interop scenarios to get a declaration to match an existing COM interface or coclass. It should always be near a [ComVisible] or [ComImport] attribute.

like image 141
Hans Passant Avatar answered Sep 23 '22 00:09

Hans Passant


The Guid attribute was introduced for COM interop - but there's nothing preventing you (or any other third party) from repurposing it for other uses.

Attributes, generally, provide additional information ("metadata") that can be used by other code however suits.

like image 37
Bevan Avatar answered Sep 21 '22 00:09

Bevan