public void ReflectTransparentPrivateStruct_InternalField () { PrivateType pt = new PrivateType (1.0, 2.0); FieldInfo fi = typeof (PrivateType).GetField ("py", BindingFlags.Instance | BindingFlags.NonPublic); // we can find it... Assert.IsNotNull (fi, "py"); // and we can use it, just like we can write "double d = pt.py;" Assert.AreEqual (2.0d, (double) fi.GetValue (pt), "GetValue"); // or "pt.py = -2.0;" fi.SetValue (pt, -2.0); Assert.AreEqual (-2.0d, pt.Y, "Y"); }
public void ReflectTransparentPrivateType_PrivateField () { PrivateType pt = new PrivateType (1.0, 2.0); FieldInfo fi = typeof (PrivateType).GetField ("px", BindingFlags.Instance | BindingFlags.NonPublic); // we can find it... Assert.IsNotNull (fi, "px"); // but we can't use it, just like we can't write "double d = pt.px;" Assert.Throws<FieldAccessException> (delegate { fi.GetValue (pt); }, "GetValue"); // or "pt.px = -1.0;" Assert.Throws<FieldAccessException> (delegate { fi.SetValue (pt, -1.0); }, "SetValue"); }
public void ReflectTransparentPrivateType_InternalMember () { PrivateType pt = new PrivateType (1.0, 2.0); MethodInfo mi = typeof (PrivateType).GetMethod ("Add", BindingFlags.Instance | BindingFlags.NonPublic); // we can find it... Assert.IsNotNull (mi, "Add"); // and we can use it since it's internal // i.e. just like we could do a "pt.Clear();" double result = (double) mi.Invoke (pt, new object [0]); Assert.AreEqual (3.0, result, "Return Value"); }
public void ReflectTransparentPrivateType_PrivateMember () { PrivateType pt = new PrivateType (1.0, 2.0); MethodInfo mi = typeof (PrivateType).GetMethod ("Reset", BindingFlags.Instance | BindingFlags.NonPublic); // we can find it... Assert.IsNotNull (mi, "Reset"); // but we can't use it, just like we can't write "pt.Reset();" Assert.Throws<MethodAccessException> (delegate { mi.Invoke (pt, new object [0]); }, "Reset"); }
public void Delegate_CreateDelegate_InternalMethod () { PrivateType pt = new PrivateType (1.0, 2.0); MethodInfo mi = typeof (PrivateType).GetMethod ("Add", BindingFlags.NonPublic | BindingFlags.Instance); Assert.IsNotNull (mi, "Add"); DoubleGetter dget = (DoubleGetter) Delegate.CreateDelegate (typeof (DoubleGetter), pt, mi); Assert.IsNotNull (dget, "Delegate.CreateDelegate(Type,object,string)"); Assert.AreEqual (3.0, dget (), "dget-1"); dget = (DoubleGetter) Delegate.CreateDelegate (typeof (DoubleGetter), pt, "Add"); Assert.IsNotNull (dget, "Delegate.CreateDelegate(Type,object,string)"); Assert.AreEqual (3.0, dget (), "dget-2"); }
public void Delegate_CreateDelegate_PrivateMethod () { PrivateType pt = new PrivateType (1.0, 2.0); MethodInfo mi = typeof (PrivateType).GetMethod ("Reset", BindingFlags.NonPublic | BindingFlags.Instance); Assert.IsNotNull (mi, "Reset"); Assert.Throws<MethodAccessException> (delegate { Delegate.CreateDelegate (typeof (Caller), pt, mi); }, "Delegate.CreateDelegate(Type,object,MethodInfo)"); Assert.Throws<MethodAccessException> (delegate { Delegate.CreateDelegate (typeof (Caller), pt, "Reset"); }, "Delegate.CreateDelegate(Type,object,string)"); }