Ordnet der Operator typeof () in C # ein neues Type-Objekt auf dem Heap zu oder gibt einen vorhandenen zurück?

7

Sollte ziemlich selbsterklärend sein, aber dies ist im Zusammenhang mit Echtzeit-XNA-Code, wo ich Zuteilungen vermeiden möchte, um GC zu vermeiden. Ich frage mich also, ob die verwalteten Typ-Objekte, die den geladenen Typen zugeordnet sind, immer in der Laufzeit vorhanden sind, oder ob typeof () tatsächlich ein neues Type-Objekt (vermutlich aus einigen nicht verwalteten Metadaten in der Laufzeitumgebung) auf dem Heap konstruiert. Das wird Müll gesammelt werden. Fühlen Sie sich frei, alle unwissenden Annahmen / Missverständnisse aufzuzeigen, die sich ergeben, wenn Sie auch diese Frage stellen =)

    
Max Strini 21.10.2011, 22:42
quelle

2 Antworten

15

Nein, Typen werden zwischengespeichert, sie gibt immer dieselbe statische readonly-Instanz zurück.

Sie können dieses Beispieltestprogramm schreiben, um dies zu überprüfen:)

%Vor%

Dasselbe gilt für die GetType-Methode und für jede andere Reflexionsfunktion, wie das Abrufen von Eigenschaften, Methoden, Feldern, Attributen und allem anderen.

    
Salvatore Previti 21.10.2011, 22:43
quelle
15

Aus dem C # 4 Spec-Abschnitt 7.6.11:

  

Es gibt nur ein System.Type -Objekt für einen gegebenen Typ. Dies bedeutet, dass für einen Typ T , typeof(T) == typeof(T) immer wahr ist.

(Wenn Sie den Typ über Reflektion erhalten, ruft er immer auch das gleiche Type -Objekt ab, aber das ist nicht in der Spezifikation.)

    
Jon Skeet 21.10.2011 22:46
quelle