2016-06-09 10 views
0

Ich bin mit dem XmlSerializer Konstruktor, der für ein Type-Objekt fragt:Warum kann ich den Namen der Klasse nicht als Typ verwenden?

XmlSerializer mySerializer = new XmlSerializer(typeof(MyClass)); 

Warum ist es nicht dasselbe den Namen der Klasse als Typ zu benutzen? Wie folgt aus:

XmlSerializer mySerializer = new XmlSerializer(MyClass); 
+5

Da die Sprachspezifikation und anschließend der Compiler es erfordern. –

+1

Warum verwenden Sie einen String als Nummer ohne Casting? Nahtgrund. –

+0

Aber ich verstehe, dass MyClass ein Typ ist, liege ich falsch? – user3646717

Antwort

0

Das erwartet XmlSerializer Konstruktor eine Instanz vom Typ System.Type für seine Parameter. Der Bezeichner MyClass entspricht keiner Instanz von irgendetwas; Es ist nur der Name einer Klasse. Das Schlüsselwort typeof gibt eine System.Type-Instanz zurück, die den von Ihnen angegebenen Typ darstellt (in diesem Fall eine System.Type-Instanz, die die MyClass-Klasse darstellt).

1

Der erste Kommentar zu dieser Frage ist richtig, aber ich denke, dass es mit dem praktischen Grund weiter geklärt werden kann.

MyClass ist nicht etwas, das alleine ausgeführt werden kann. Warum? Weil der C# -Compiler selbst keinen Code hat, um "MyClass" auf etwas zu übersetzen, das für die Ausführungsumgebung von Bedeutung ist.

Die erste Anweisung funktioniert, weil der Konstruktor von XmlSerializer eine Instanz der Klasse 'Type' erwartet. Der Operator typeof gibt eine Instanz der Klasse Type zurück, die Informationen über die Klasse 'MyClass' enthält. Das Argument für den Operator typeof (?) Muss ein Typ sein, der zur Kompilierzeit bekannt ist. Die Bedeutung des Operators 'typeof' wird im # Compiler erzeugt, so dass während der Kompilierung typeof (ClassName) Code generiert, der eine Instanz der Klasse 'Type' zurückgibt, die Informationen über die angegebene Klasse (das Argument) enthält. Da Type wie jede andere Klasse ist, können Sie sogar typeof (Type) verwenden.

+0

Nun antworten Sie wirklich das Konzept geklärt. Vielen Dank! – user3646717

Verwandte Themen