我已经阅读了很多关于属性的文章,并且对它们了解得相当多。
但我无法理解的一件事是:“它们到底是什么?”。
我的意思是,如果这不是继承或接口(interface)实现或其他 OOP 可理解的概念,那么这是什么概念?
当您对类或类成员使用 and 属性时,幕后会发生什么?
我已阅读此站点中的其他相关帖子。但他们并没有提供太多关于真实情况的信息。它们更多地是关于属性的使用。以及对它们到底是什么的难以理解的解释。在另一篇文章中,这是声明它们的内容:“元数据。关于您的对象/方法/属性的数据。”这并没有阐明概念
请您参考如下方法:
它们只是存储在类型的底层定义(不是实例)中的元数据。例如,如果我这样做:
[Description("some text")]
public string Name {get;set;}
然后事实是 DescriptionAttribute 和 description 构造函数参数 "some text" 存储在 IL 中对应属性 姓名。这对每个实例的成本没有影响,而且它本身什么都不做。只有在代码明确询问运行时时才会使用此数据:
- “您有哪些针对
Name的附加属性元数据?” - “
Name是否有DescriptionAttribute?” - “请为我构建针对
Name存储的DescriptionAttribute,如果有的话”
然后对结果做一些事情。
注意:编译器和/或 CLI 对某些一些 属性进行了不同的处理,并以不同的方式实现。例如,[Serializable] 成为 IL 类型标志 - 而不是 IL 属性 - 但运行时对其进行填充,以便 API 将其报告为另一个。
