Identifiziert Type.GUID eindeutig jeden Typ bei Kompilierungen? [Duplikat]

8

Ich möchte Type als Schlüsselwörterbuch verwenden, aber ich würde lieber entweder den vollständigen Typnamen oder Type.GUID verwenden. Wie zuverlässig und korrekt ist Type.GUID für diese Aufgabe?

Ayende Rahien schreibt:

  

Können Sie sich darauf verlassen, dass System.Type.GUID stabil ist?

     

Mit "stabil" meine ich, dass es den gleichen Wert für den gleichen Typ über Compilations generiert. Empirische Beweise deuten darauf hin, dass dies der Fall ist, wobei die folgenden Faktoren die Guid eines Typs bestimmen:

     
  • Typname (einschließlich des Namespaces)
  •   
  • Name der Baugruppe
  •   
  • Öffentlicher Schlüssel der Baugruppe
  •   

Beim Einblenden in das System stellt sich heraus, dass System.Type.GUID ist   Schließlich wird dies in einen Aufruf von System.RuntimeType.GetGUID übersetzt   eine der unheimlichen InternallCall-Methode, die direkt in implementiert werden   die Laufzeit selbst.

     

Ich frage mich ...

    
Tomislav Markovski 29.12.2011, 10:17
quelle

5 Antworten

4

Aus der Dokumentation in Ссылка .

Der Zweck von Type.GUID besteht darin, den mit der Klasse verknüpften Wert mithilfe von [Guid("...")] zu ermitteln. Es gibt jedoch auch eine GUID zurück, wenn dieses Attribut nicht zugeordnet ist. Das Problem ist, wo es das bekommt. Ein kleiner Test zeigt, dass die GUID stabil ist. Ich habe die GUID einer Klasse überprüft und überprüft, ob sie sich geändert hat, als ich die Klasse umbenannte. Als ich die Klasse umbenannt habe, habe ich wieder die Original-GUID bekommen. Da diese Guids jedoch aus dem Nichts erscheinen, sollte man nicht davon ausgehen, dass sie über die Zeit, Releases, Framework-Versionen usw. stabil sind.

    
Pieter van Ginkel 29.12.2011, 10:27
quelle
3

Benutze es nicht.

%Vor%

Auf ideone.com getestet, führen sie Mono 2.8

aus

BEARBEITEN: Nach der Verwendung von System.Reflection auf verschiedenen (großen) Assemblies konnte ich keine Kollision zwischen zwei GUIDs finden. So scheint es das 0-GUID-Problem ist Mono-spezifisch.

    
user703016 29.12.2011 10:27
quelle
2

Type.FullName oder < a href="http://msdn.microsoft.com/en-us/library/system.type.assemblyqualifiedname.aspx"> Type.AssemblyQualifiedName ist für Ihre Anforderungen OK. Außerdem vereinfacht es das Debuggen im Vergleich zu GUIDs (aussagekräftiger Name des Typs im Vergleich zu unbekannter GUID).

Ein weiterer Punkt ist die GUID Eigenschaft scheint nicht gut zu sein dokumentiert, also würde ich mich nicht darauf verlassen.

BEARBEITEN : Sie können auch die Type -Instanz selbst als Schlüssel verwenden.

    
ken2k 29.12.2011 10:31
quelle
1

Ich denke, es schafft kein Problem mit Type.GUID als Schlüssel zu Ihrem Wörterbuch. Wenn Guid nicht zuverlässig ist, hätten die meisten COM-Komponenten nicht funktioniert.

    
crypted 29.12.2011 10:24
quelle
1

Sie sollten das Wörterbuch entweder dynamisch erstellen, indem Sie die GUID jedes Mal nachschlagen, oder Sie sollten die GUID statisch mit der GuidAttribute-Klasse festlegen. Sie sollten sich niemals auf ein Verhalten verlassen, das nicht garantiert ist.

    
David Schwartz 29.12.2011 10:32
quelle

Tags und Links