【问题标题】:What is Custom Attribute in .NET.NET 中的自定义属性是什么
【发布时间】:2012-07-29 09:07:16
【问题描述】:

问题没那么简单:)。

基本上,我需要知道的是,从Attribute.GetCustomAttributes() 方法系列中的任何方法返回的数组中将包含什么。

当然,我定义的所有属性都会在那里。然而,不仅仅是他们。例如,EdmScalarPropertyAttribute 等所有实体框架属性也都在那里。哪些属性不会被视为自定义?

【问题讨论】:

  • 不明白。您是在问什么是“自定义属性”与“属性”?
  • 我认为这是重点。
  • 2ken2k:是的。两者都是一般的,就GetCustomAttributes方法而言,如果有区别的话。

标签: .net attributes custom-attributes


【解决方案1】:

几乎所有从System.Attribute 派生并使用[AttributeName] 语法添加的属性都将存在。其中一些甚至是编译器自己添加的,例如OutAttribute 用于out 关键字。

“自定义”一词将它们与直接内置于运行时的属性区分开来,例如成员/类型的可见性、staticvirtualsealed 等方法。

例如Type.AttributesTypeAttributes 类型的枚举,或者MethodBase.Attributes 对应于MethodAttributes 枚举。这些不算作“自定义”。


有一些奇怪的极端情况,关于[Serializable] 和内存布局。

基本 C# writes:

使System.SerializableAttribute 不仅仅是一个自定义属性的特征之一是,CIL 具有用于可序列化类的特殊标头符号。

...

SerializableAttribute 转换为元数据表中的设置位。这使得SerializableAttribute 成为一个伪属性,一个在元数据表中设置位或字段的属性。

【讨论】:

  • 非常感谢!看起来对于最终用户(程序员)来说有一个困惑,因为自定义属性和属性是完全不同的东西。
  • 通常我们将自定义属性称为属性。所以这当然是一个不幸的术语。
猜你喜欢
  • 2017-01-04
  • 2011-01-24
  • 2010-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-12
  • 2011-02-26
相关资源
最近更新 更多