C # -Leistungsfrage: typeof (MyClass) vs. this.GetType ()
Im ersten Beispiel der log4net Konfiguration-Handbuch der Autor verwendet typeof(MyApp)
um den Typ der enthaltenden Klasse MyApp
. Gibt es einen Grund, nicht zu verwenden this.GetType()
performancetechnisch? Denn es scheint mir, dass this.GetType()
ist viel sicherer vor möglichen copy-paste-Fehler beim kopieren in eine andere Klasse.
Kommentar zu dem Problem
Wenn Sie keine Instanz, nur TYPEOF vorhanden ist, ist es nicht?
InformationsquelleAutor der Frage Ilya Kogan | 2011-03-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
typeof(Foo) ist eine statische Typ-lookup; im wesentlichen geschieht es zur compile-Zeit, so erhalten Sie nur die explizit benannten Typ.
GetType() ist ein dynamischer Typ lookup; es ist eine virtuelle Methode aufgerufen wird, zur Laufzeit und geben Sie die genaue Art, auch wenn Sie mit Polymorphismus. Es ist also "langsamer", theoretisch, aber es gibt Ihnen etwas, das Sie nicht bekommen kann aus typeof(T). Wenn Sie brauchen, der eine oder andere für Ihr design, die Geschwindigkeit wird nicht ein Faktor sein.
InformationsquelleAutor der Antwort MikeP
Performance-Probleme beiseite, im Beispiel,
GetType
ist nicht einmal eine option, weil es ist ein Instanz Methode; es kann nicht aufgerufen werden, die aus einem Feld-Initialisierer. In jedem Fall, da es die Absicht ist, zu initialisieren, eine statische Feld aus einem statischen Kontext, logischthis
Referenz kann nicht verfügbar sein - so geht man die static-Konstruktor route würde nicht helfen mit, so dass dieGetType
.InformationsquelleAutor der Antwort Ani