2010-09-21 4 views
16

J'ai récemment récupéré du code C# et une des classes a un attribut Guid au-dessus. Je ne comprends pas ce que c'est ou à quoi il sert. Est-ce que quelqu'un peut me donner un aperçu de ce que c'est, ou simplement me diriger dans la direction de quelques articles qui donnent plus d'informations à ce sujet?Quel est l'attribut Guid qui apparaît au-dessus des classes en C#?

Merci!

+2

Cela ressemble-t-il à ceci? http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.guidattribute.aspx – Tx3

+0

Oui, ça ressemble à ça. Y a-t-il une différence entre Guid et GuidAttribute? – Andrei

+3

Lorsque vous appliquez un attribut en utilisant "[]", vous pouvez laisser l'attribut "Attribute" à la fin du nom du type. Il suppose qu'il est là. En tant que tels, ils sont identiques. – Rangoric

Répondre

8

C'est l'identificateur COM qui représente la classe en question. La classe est conçue pour COM interop.

7

Guid (Identificateur global unique) est utilisé pour identifier votre composant par le monde extérieur. Lorsque vous écrivez un projet qui va être utilisé comme COM (Component Object Model), vous devrez donner un nom unique. Pour cette raison, vous devez appliquer l'attribut GUID.

Vous pouvez en lire plus à ce sujet ici.

GUIDAttributeClass

8

Vous pouvez jeter un oeil à la classe ComVisibleAttribute pour en savoir plus sur les façons de faire des classes gérées disponibles au code non managé.

[Guid] est l'équivalent exact du .NET Type.AssemblyQualifiedName. Comme

System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5561934e089 

Avec la distinction évidente que le nom de type .NET est plus facile à lire par un être humain. Il est nécessaire de permettre à un programme de découvrir quelle DLL doit être chargée pour utiliser un type. Dans le cas .NET, les assemblages sont (généralement) trouvés en énumérant le GAC. C'est un fichier basé.

COM utilise cependant le Registre. Après que l'assembly dont vous avez regardé le code source a été créé et enregistré, vous pouvez retrouver le [Guid] dans le registre. Lancez regedit.exe et naviguez jusqu'à HKLM\Software\Classes\CLSID\{guid}. Vous verrez les valeurs de clé d'enregistrement que le moteur d'exécution utilise pour charger le CLR et l'assembly.

+0

Je joue actuellement avec exposer ma classe .NET à COM, et ai enregistré mon assemblée. Pouvez-vous expliquer pourquoi le GUID que j'ai spécifié par GuidAttribute n'apparaîtra pas dans HKLM \ Software \ Classes \ CLSID \? – Dave

+0

Regarder au mauvais endroit est l'explication typique. Comme 'HKLM \ Software \ Wow6432Node \ Classes \ CLSID', l'hôte des serveurs COM 32 bits. –

Questions connexes