我发现了一个特殊的用例,您只能使用委托:
public delegate bool WndEnumProc(IntPtr hwnd, IntPtr lParam);
[DllImport("User32.dll")]
public static extern bool EnumWindows(WndEnumProc lpEnumFunc, IntPtr lParam);
使用Func / Action不起作用'Namespace.Class.WndEnumProc' is a 'field' but is used like a 'type'
:
public Func<IntPtr, IntPtr, bool> WndEnumProc;
[DllImport("User32.dll")]
public static extern bool EnumWindows(WndEnumProc lpEnumFunc, IntPtr lParam);
以下代码可以编译,但是在运行时会引发异常,因为System.Runtime.InteropServices.DllImportAttribute
它不支持通用类型的封送处理:
[DllImport("User32.dll")]
public static extern bool EnumWindows(Func<IntPtr, IntPtr, bool> lpEnumFunc, IntPtr lParam);
我向每个人展示此示例,以表明:有时委托是您唯一的选择。这是对您问题的合理答案why not use Action<T>/Func<T> ?