Beispiel #1
0
    public static void  RuntimeMethodHandleTest()
    {
        MethodInfo          mi = typeof(Base).GetMethod(nameof(Base.MyMethod));
        RuntimeMethodHandle h  = mi.MethodHandle;

        Assert.Equal(mi, MethodBase.GetMethodFromHandle(h));

        Assert.True(h.Value != IntPtr.Zero);

        Assert.Equal(h.GetHashCode(), h.GetHashCode());
        Assert.Equal(default(RuntimeMethodHandle).GetHashCode(), default(RuntimeMethodHandle).GetHashCode());

        Assert.True(h.Equals(h));
        Assert.False(h.Equals(default(RuntimeMethodHandle)));
        Assert.False(default(RuntimeMethodHandle).Equals(h));
        Assert.True(default(RuntimeMethodHandle).Equals(default(RuntimeMethodHandle)));

        Assert.True(h.Equals((object)h));
        Assert.True(((IEquatable <RuntimeMethodHandle>)h).Equals(h));
        Assert.False(h.Equals(new object()));
        Assert.False(h.Equals(null));

        Assert.False(h == default(RuntimeMethodHandle));
        Assert.True(h != default(RuntimeMethodHandle));

        IntPtr hPtr = RuntimeMethodHandle.ToIntPtr(h);
        RuntimeMethodHandle hNew = RuntimeMethodHandle.FromIntPtr(hPtr);

        Assert.True(h.Equals(hNew));
        Assert.True(hNew.Equals(h));

        // Confirm the created handle is valid
        Assert.Equal(mi, MethodBase.GetMethodFromHandle(hNew));
    }