当我们在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
中列为预处理程序指令这个符号叫什么?我在哪里可以找到它的文献或文献?
答案 0 :(得分:4)
这些是attributes。他们不是&#34;预处理器&#34;语言的一部分 - 与#if
,#pragma
不同(预处理器仍然不是真正的句柄,但是应该考虑这种方式)。
基本上,属性允许您表达有关类型,字段,方法,参数和返回值的编译时常量元数据。然后可以通过反射在执行时检索元数据。
在查找文档方面需要了解的一件重要事情:C#编译器将尝试解析如下属性:
[Foo]
同时为Foo
和FooAttribute
。因此,您的[MarshalAs]
示例实际上是指MarshalAsAttribute
。通常,所有属性都以Attribute
后缀结尾。