C#中属性的目的是什么?

Red*_*wan 12 .net c# attributes class

  • C#中属性的目的是什么?

  • 我如何知道哪个属性必须用于特定功能?

  • 如何在c#中动态添加它们?

  • 什么是自定义属性?

Jon*_*len 10

  1. 属性用于添加有关类,函数等的附加信息.编译器在查看属性时有时会执行特殊操作.程序运行时,库会查看其他属性.

  2. 首先查看所需功能的文档.它应列出必要的属性.

  3. 不可以.只能在编译代码之前应用属性.

  4. 这只是您自己创建的一个属性,而不是.NET附带的属性.


Pri*_*Key 7

当你编写代码时,你回答"什么?" 题:

  1. 该怎么办?(方法)
  2. 什么存储?(领域和属性)
  3. 什么是什么?(类层次结构)

等属性为这个问题增加了另一个维度.他们回答"怎么样?" 题.并回复"如何?" 问题可能对IDE很重要,

[Browsable(false)]
public string NotImportantField { get; set; } // property which will not be displayed in VS
Run Code Online (Sandbox Code Playgroud)

对于编译器

[ThreadStatic]
private static RequestContext context; // field which will be different for every thread
Run Code Online (Sandbox Code Playgroud)

或者通过反思分析你的另一个代码.

[XmlIgnore]
public string NotSerializableField { get; set; } // property which will not be xml-serialized
Run Code Online (Sandbox Code Playgroud)

您可能希望定义自定义属性,如果您的程序集,类,字段,方法等将通过反射进行分析或调用(例如通常是控制容器和面向方面编程的反转).这样的属性可能(并且通常是唯一的方式)指示调用者或分析器根据这样的属性存在或其属性来表现不同.

关于你的第一个问题,我们如何知道要为特定结果调用哪种方法?作为.NET开发人员的一个优点是,所有内容都记录得非常彻底.:)


Sid*_*war 4

属性用于声明式编程模型

属性不会强制任何功能(除非开箱即用)。对于开箱即用的属性,请阅读 msdn 上的文档。对于您自己的属性,您需要编写代码来说明如果类/方法等具有属性该怎么办。

我不认为属性是动态添加的。但它们是动态读取的。它们是元数据,因此在编译时添加。检查一下:C# 中可以动态添加属性吗?

自定义属性是您创建并用 标记您的类的属性。要创建属性,您需要创建一个继承自 System.Attribute 的类(用于该属性)。检查这个:http://msdn.microsoft.com/en-us/library/sw480ze8.aspx