为什么我不能使用 class 的名称作为类型?
Why I can't use the name of the class as a type?
我正在使用要求 Type 对象的 XmlSerializer 构造函数:
XmlSerializer mySerializer = new XmlSerializer(typeof(MyClass));
为什么用class的名字作为类型不一样?像这样:
XmlSerializer mySerializer = new XmlSerializer(MyClass);
XmlSerializer 构造函数需要类型为 System.Type 的实例作为其参数。标识符 MyClass 不对应于任何实例;这只是 class 的名字。 typeof 关键字 returns 代表您指定类型的 System.Type 实例(在本例中,代表 MyClass class 的 System.Type 实例)。
这个问题的第一个评论是正确的,但我认为可以进一步阐明实际原因。
MyClass 不是可以单独执行的东西。为什么?因为 c# 编译器本身没有代码来翻译 'MyClass' 对执行环境有意义的东西。
第一个语句有效,因为 XmlSerializer 的构造函数需要一个 class 'Type' 的实例。
typeof 运算符 returns class 类型的实例,其中包含有关 class 'MyClass' 的信息。
运算符 typeof(?) 的参数必须是编译时已知的类型。
运算符 'typeof' 的含义是在 # 编译器中烘焙的,因此在编译期间 typeof(ClassName) 将生成代码 returns 'Type' class 的一个实例,其中包含有关的信息class 指定(参数)。
因为 Type 与任何其他 class 一样,您甚至可以使用 typeof(Type).
我正在使用要求 Type 对象的 XmlSerializer 构造函数:
XmlSerializer mySerializer = new XmlSerializer(typeof(MyClass));
为什么用class的名字作为类型不一样?像这样:
XmlSerializer mySerializer = new XmlSerializer(MyClass);
XmlSerializer 构造函数需要类型为 System.Type 的实例作为其参数。标识符 MyClass 不对应于任何实例;这只是 class 的名字。 typeof 关键字 returns 代表您指定类型的 System.Type 实例(在本例中,代表 MyClass class 的 System.Type 实例)。
这个问题的第一个评论是正确的,但我认为可以进一步阐明实际原因。
MyClass 不是可以单独执行的东西。为什么?因为 c# 编译器本身没有代码来翻译 'MyClass' 对执行环境有意义的东西。
第一个语句有效,因为 XmlSerializer 的构造函数需要一个 class 'Type' 的实例。 typeof 运算符 returns class 类型的实例,其中包含有关 class 'MyClass' 的信息。 运算符 typeof(?) 的参数必须是编译时已知的类型。 运算符 'typeof' 的含义是在 # 编译器中烘焙的,因此在编译期间 typeof(ClassName) 将生成代码 returns 'Type' class 的一个实例,其中包含有关的信息class 指定(参数)。 因为 Type 与任何其他 class 一样,您甚至可以使用 typeof(Type).