C# .Net属性功能是在编译时使用还是在运行时使用,或者两者都使用?
在.Net中,属性特性是在编译时使用还是在运行时使用,或者两者都使用?你能给我一些例子吗?属性在编译时被编译到代码中,但它们通常在运行时被用作触发器来执行不同的操作。编译器将所谓的元数据添加到用属性修饰的对象中。无论是通过属性还是其他方式创建的元数据,都可以在运行时通过访问。因此,您可以使用属性进行修饰,然后在程序运行时读取详细信息。但是,说元数据在编译时被“使用”并不完全正确,因为编译器并不关心元数据是什么。属性在编译时作为元数据输出到程序集。然后在运行时通过反射使用此元数据-例如使用 编译器在编译时也会使用一些属性。例如,编译器查看以确定属性是否可用于特定对象。大多数仅在运行时使用。编译器使用的数量非常有限,包括:C# .Net属性功能是在编译时使用还是在运行时使用,或者两者都使用?,c#,.net,attributes,C#,.net,Attributes,在.Net中,属性特性是在编译时使用还是在运行时使用,或者两者都使用?你能给我一些例子吗?属性在编译时被编译到代码中,但它们通常在运行时被用作触发器来执行不同的操作。编译器将所谓的元数据添加到用属性修饰的对象中。无论是通过属性还是其他方式创建的元数据,都可以在运行时通过访问。因此,您可以使用属性进行修饰,然后在程序运行时读取详细信息。但是,说元数据在编译时被“使用”并不完全正确,因为编译器并不关心元数据是什么。属性在编译时作为元数据输出到程序集。然后在运行时通过反射使用此元数据-例如使用 编译器
-忽略每个生成符号的方法调用[条件(…)]
-生成输出时发出警告/错误[过时(…)]
-作为CLI标志写入[Serializable]
-用于扩展方法[扩展]
-影响属性的应用方式[AttributeUsage]
-
[AssemblyVersion]
,[AssemblyFileVersion]
等,以及影响可访问性的[InternalsVisibleTo]
等
此外,PostSharp等工具会根据属性执行额外的编译后步骤
编译器可能会向生成的类型/方法(对于非方法/类型、迭代器块等)添加一些其他属性。编译器在编译时也会使用ObsoleteAttribute。-1:在某些情况下,属性会以有意义的方式影响编译。例如,Conditional属性主要用于编译时,如果使用不正确,可能会触发编译器错误。。。我忘了那些案子了。。。过时是另一个原因。