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 ...
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.
Benutze es nicht.
%Vor%Auf ideone.com getestet, führen sie Mono 2.8
ausBEARBEITEN: 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.
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.
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.
Tags und Links .net c# reflection types