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 中被列为预处理器指令
这个符号叫什么?我在哪里可以找到它的文献或文档?
这些是属性。他们不是";预处理器";部分语言-不同于#if
、#pragma
(它们仍然不是预处理器真正的句柄,但应该这样想)。
基本上,属性允许您表达关于类型、字段、方法、参数和返回值的编译时常量元数据。然后,可以在执行时通过反射来检索该元数据。
在查找文档方面需要知道的一件重要事情是:C#编译器将尝试解析这样的属性:
[Foo]
作为CCD_ 3和CCD_。所以您的[MarshalAs]
示例实际上是指MarshalAsAttribute
。按照惯例,所有属性都以Attribute
后缀结尾。