我正在讨论一些c#教程,其中说明了以下内容:
“在找到属性类之后,编译器将检查该类是否允许该属性。然后它将检查与属性use中指定的参数匹配的构造函数。如果找到一个,则创建一个实例通过使用指定值“
调用构造函数来调用该对象这一段的名称是“编译过程”,它指的是编译器处理属性的方式。我很抱歉无知,但不应该在运行时创建实例吗?
感谢。
答案 0 :(得分:3)
属性定义类的元数据 - 类的每个实例(即对象)将共享相同的属性值。此元数据与类型定义一起存储,类型定义在编译时从源文件计算一次。
答案 1 :(得分:2)
由于还有affect the compiler的属性,如果编译器在编译时实例化它们,我不会感到惊讶。那是什么?
答案 2 :(得分:1)
有一个“编译”过程,它生成一个使用.NET框架解释的中间代码。
这就是为什么他们在谈论编译过程。
答案 3 :(得分:0)
编译器仅创建描述属性构造和属性赋值的元数据。 属性本身仅在您使用反射列出属性时进行实例化。我认为每次调用反射都会创建该属性的新实例。
我认为有一种方法(与仅反射上下文相关)直接从元检查属性而不实例化它。