繁体   English   中英

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

[英]Why I can't use the name of the class as a type?

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

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

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

XmlSerializer mySerializer = new XmlSerializer(MyClass);

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

MyClass不能单独执行。 为什么? 因为c#编译器本身没有代码来翻译对执行环境有意义的“ MyClass”。

第一条语句起作用是因为XmlSerializer的构造函数需要类'Type'的实例。 typeof运算符返回Type类型的实例,该实例包含有关“ MyClass”类的信息。 运算符typeof(?)的参数必须是编译时已知的类型。 运算符'typeof'的含义在#编译器中进行了烘焙,因此在编译过程中typeof(ClassName)将生成代码,该代码返回'Type'类的实例,该实例包含有关指定类(参数)的信息。 因为Type与其他任何类一样,所以您甚至可以使用typeof(Type)。

XmlSerializer构造函数的参数期望使用System.Type类型的实例。 标识符MyClass不对应任何实例。 这只是一个班级的名字。 typeof关键字返回一个System.Type实例,该实例表示您指定的类型(在本例中,该System.Type实例表示MyClass类)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM