你做 .NET 开发的时候,一定用过 DllImport
这个特性吧,这货是用于 P/Invoke (Platform Invoke, 平台调用) 的。这种 DllImport
标记的方法都带有一个 extern
关键字。
那么有没有可能我们自己写一个自己的 extern
方法呢?答案是可以的。本文就写一个这样的例子。
DllImport
日常我们的平台调用代码是这样的:
class Walterlv
{
[STAThread]
static void Main(string[] args)
{
var hwnd = FindWindow(null, "那个窗口的标题栏文字");
// 此部分代码省略。
}
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
}
你看不到 FindWindow
的实现。
自定义的 extern
那我们能否自己实现一个这样的 extern
的方法呢?写一写,还真是能写得出来的。
▲ 外部方法需要 Attribute 的提示
只不过如果你装了 ReSharper,会给出一个提示,告诉你外部方法应该写一个 Attribute
在上面(虽然实际上编译没什么问题)。
那么我们就真的写一个 Attribute
在上面吧。
class Walterlv
{
internal void Run()
{
Foo();
}
[WalterlvHiddenMethod]
private static extern void Foo();
}
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]
internal sealed