我在看一些C#教程,指出以下:对象创建
“后发现属性类,编译器会检查属性是否被允许在一个类然后,它会检查对于与属性use中指定的参数相匹配的构造函数,如果它找到一个构造函数,则通过调用具有指定值的构造函数来创建该对象的一个实例“
此段的名称是”编译过程“它指的是编译器处理属性的方式。我为无知而感到抱歉,但不应该在运行时创建实例吗?
感谢。
我在看一些C#教程,指出以下:对象创建
“后发现属性类,编译器会检查属性是否被允许在一个类然后,它会检查对于与属性use中指定的参数相匹配的构造函数,如果它找到一个构造函数,则通过调用具有指定值的构造函数来创建该对象的一个实例“
此段的名称是”编译过程“它指的是编译器处理属性的方式。我为无知而感到抱歉,但不应该在运行时创建实例吗?
感谢。
属性为类定义元数据 - 类的每个实例(即对象)将共享相同的属性值。该元数据与类型定义一起存储,该类型定义在编译时从源文件计算一次。
有一个“编译”过程,生成一个中介码,使用.NET框架进行解释。
这就是为什么他们在谈论编译过程。
既然有属性,也affect the compiler,我不会感到惊讶,如果编译did编译时实例化它们。所以呢?
我不知道编译器实例化对象。 – user429400 2010-11-21 16:37:01
听起来不太可能。我怀疑编译器实例化属性(即它调用用户定义属性的构造函数)。 – CodesInChaos 2010-11-21 17:20:22
编译器如何实例化一个对象? – miguel 2010-11-21 17:57:54
编译器仅创建描述属性构造和对其属性赋值的元数据。 属性本身仅在您使用反射列出属性时才实例化。我认为每次调用反射都会创建该属性的新实例。
我认为有一种方法(与仅反射上下文有关)直接从元检查属性,根本没有实例化它。
正在搜索该报价正好返回1个结果:此问题。你从哪里得到它的? – dtb 2010-11-21 16:07:36
听起来好像这里的编译器被用作“编译器生成的代码”的同义词。 – Hogan 2010-11-21 17:38:44