使用反射确定方法是否为“extern”

时间:2013-11-04 13:11:18

标签: c# reflection

如何使用反射确定方法是否为extern

示例方法:

var mEnter = typeof(System.Threading.Monitor).GetMethod("Exit", BindingFlags.Static | BindingFlags.Public);

2 个答案:

答案 0 :(得分:6)

var isExtern = (mEnter.MethodImplementationFlags
                    & MethodImplAttributes.InternalCall) != 0;

答案 1 :(得分:4)

我不知道是否有任何直接的解决办法,但我可以展示一个技巧 我用过的 假设我们有一个包含extern方法的类

class MyClass
{
    [DllImport("kernel32.dll")]
    public static extern bool Beep(int ferequency, int duration);
    public static void gr()
    {
    }
    public void GG()
    {
    }
}

我们可以通过编写此代码来检查extern方法

 var t = typeof(MyClass);
        var l = t.GetMethods();
        foreach (var item in l)
        {
            if (item.GetMethodBody() == null && item.IsStatic)
            {
                // Method is Extern
            }
        }