何时创建属性对象

本文关键字:对象 属性 创建 何时 | 更新日期: 2023-09-27 18:22:39

由于属性实际上只是附加到程序集的元数据,这是否意味着属性对象仅在请求时创建(例如调用GetCustomAttributes时)?

或者它们是在创建对象时创建的?

或者,前两个的组合,当由于CLR的属性扫描而创建对象时创建?

何时创建属性对象

通过C#从CLR,第三版:

如果要构造属性对象,则必须调用GetCustomAttributes或CCD_ 2。每次调用其中一个方法时,它都会构造新的实例并根据源代码中指定的值设置实例的每个字段和属性。这些方法返回对已应用属性类的完全构造实例的引用。

所以,是的,它们只是根据请求创建的。

它们是根据请求创建的。

例如,如果将某些.NET 3.0属性添加到.NET 2.0程序集(例如WCF DataContractAttribute),则您仍然可以在未安装.NET 3.0的计算机上使用.NET 2.0程序集中,前提是您没有任何试图访问这些属性的代码。

它不是那么干净,属性也会影响代码生成。某些属性由编译器进行解释,例如[DllImport]。有些是通过抖动发现的,例如[MethodImpl]。这可以无限扩展到框架中为利用属性而编写的其他工具和类。

但是,如果你想找到自己的属性,这些工具只是在做你需要做的事情,需要调用GetCustomAttributes()。这种代码永远不会与对象的实例相关联,属性应用于类型。