C#中调用的[do(args)]表示法是什么

本文关键字:表示 是什么 args 调用 do | 更新日期: 2023-09-27 18:27:17

当我们在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,

如本文所述

然而,这种表示法并不是专门用于interop服务,只是像这里一样,比如:

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

但它没有在msdn 中被列为预处理器指令

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

C#中调用的[do(args)]表示法是什么

这些是属性。他们不是";预处理器";部分语言-不同于#if#pragma(它们仍然不是预处理器真正的句柄,但应该这样想)。

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

在查找文档方面需要知道的一件重要事情是:C#编译器将尝试解析这样的属性:

[Foo]

作为CCD_ 3和CCD_。所以您的[MarshalAs]示例实际上是指MarshalAsAttribute。按照惯例,所有属性都以Attribute后缀结尾。