在C#中调用的[do(args)]符号是什么?

时间:2014-10-20 05:59:40

标签: c# attributes notation preprocessor-directive

当我们在C#中导入遗留dll时,我们会使用以下符号:

[DllImport("user32.dll")]         // Why am I enclosed in "["s
static extern int MessageBoxA(int hWnd, string strMsg, string strCaption, int iType);

或者也是:

[MarshalAs(UnmanagedType.LPStr)]  // <-- What in the world is it?
string arg1,

如上所述here

但是,这种表示法并不仅仅用于here之间的互操作服务,例如:

[Conditional("DOT")]              // <--- this guy right here!
static void MethodB()
{
    Console.WriteLine(false);
}

但它未在msdn

中列为预处理程序指令

这个符号叫什么?我在哪里可以找到它的文献或文献?

1 个答案:

答案 0 :(得分:4)

这些是attributes。他们不是&#34;预处理器&#34;语言的一部分 - 与#if#pragma不同(预处理器仍然不是真正的句柄,但是应该考虑这种方式)。

基本上,属性允许您表达有关类型,字段,方法,参数和返回值的编译时常量元数据。然后可以通过反射在执行时检索元数据。

在查找文档方面需要了解的一件重要事情:C#编译器将尝试解析如下属性:

[Foo]

同时为FooFooAttribute。因此,您的[MarshalAs]示例实际上是指MarshalAsAttribute。通常,所有属性都以Attribute后缀结尾。