为什么我不能将类的名称用作类型?

时间:2016-06-09 04:23:05

标签: c# xmlserializer typeof

我正在使用要求Type对象的XmlSerializer构造函数:

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

为什么将类的名称用作类型是不一样的?像这样:

XmlSerializer mySerializer = new XmlSerializer(MyClass);

2 个答案:

答案 0 :(得分:1)

关于这个问题的第一个评论是正确的,但我认为可以通过实际原因进一步澄清。

MyClass不是可以独立执行的东西。为什么?因为c#编译器本身没有代码来翻译MyClass'对执行环境有意义的事情。

第一个语句有效,因为XmlSerializer的构造函数需要类' Type'的实例。 typeof运算符返回类Type的实例,该实例包含有关类' MyClass'的信息。 运算符typeof(?)的参数必须是编译时已知的类型。 运营商'类型的含义'在#compiler中烘焙,以便在编译期间,typeof(ClassName)将生成返回' Type'的实例的代码。包含有关指定类(参数)的信息的类。 因为Type就像任何其他类一样,你甚至可以使用typeof(Type)。

答案 1 :(得分:0)

XmlSerializer构造函数需要System.Type类型的实例作为其参数。标识符MyClass并不对应于任何事物的实例;它只是一个类的名称。 typeof关键字返回一个System.Type实例,该实例表示您指定的类型(在本例中,是表示MyClass类的System.Type实例)。