【问题标题】:Why I can't use the name of the class as a type?为什么我不能使用类的名称作为类型?
【发布时间】:2016-06-09 04:23:04
【问题描述】:

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

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

为什么用类名作为类型不一样呢?像这样:

XmlSerializer mySerializer = new XmlSerializer(MyClass);

【问题讨论】:

  • 因为语言规范和随后的编译器需要它。
  • 为什么不使用字符串作为数字而不进行强制转换?接缝原因。
  • 但是我明白 MyClass 是一种类型,我错了吗?

标签: c# xmlserializer typeof


【解决方案1】:

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

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

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

【讨论】:

  • 你的回答确实阐明了这个概念。谢谢!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2014-01-15
    • 2016-03-28
    • 1970-01-01
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-30
    相关资源
    最近更新 更多