我见过很多使用[]
的C#程序,例如[STAThread]
,然后是代码。另一个经典的例子是[DLLImport]
。
我知道STAThread
意味着什么,但我的问题是方括号的意义是什么,基本上它们告诉编译器的是什么?
答案 0 :(得分:17)
这是一个属性。属性是一种元数据形式,您可以将其附加到各种代码元素:类,方法,程序集等。
某些属性对C#编译器有特殊意义,例如[Serializable]
可能会告诉编译器发出一些可以序列化类实例的代码(我说'可能'因为我不知道内部C#编译器的工作原理。
您还可以创建自己的属性(通过继承System.Attribute
)。然后使用反射,您可以在运行时从属性中提取信息。
一个简单的例子是创建一个属性,以指定在显示对象属性时在HTML表单中使用哪种输入字段。
一些链接:
答案 1 :(得分:3)
这些是attributes。
属性有很多用途 - [Obsolete]
将方法标记为过时,编译器会警告您。像[DebuggerNonUserCode]
之类的其他人对编译器一无所知,并且让调试器知道标记方法中的代码是自动生成的。
您还可以创建自己的属性并使用它们来标记任何类型的元数据。例如,您的Customer对象可能具有属性[MarketingInformation("Customer is rich! Milk him good!")].
答案 2 :(得分:1)
有关.Net中的属性的信息,请参阅此处:
答案 3 :(得分:1)
它们是属性,可将元数据添加到它们正在装饰的任何内容中。
答案 4 :(得分:1)
这些被称为代码属性。属性用于标记具有属性的代码,这些属性通常用于指定执行期间的行为。它们通常用于标记方法,属性和参数。在执行代码期间,将执行称为“反射”的操作来检查代码。 Reflection告诉编译器观察并遵守您指定的任何指令作为编码器标记代码的属性。
一个很好的例子是[Serializable]属性。当在类上方标记时,此属性向编译器指示它可以序列化以便持久化类实例或通过SOAP Web服务等介质进行传输。
请参阅以下文章: link text