diff --git a/ILRuntime/Reflection/ILRuntimeFieldInfo.cs b/ILRuntime/Reflection/ILRuntimeFieldInfo.cs index 50232adb..7c747000 100644 --- a/ILRuntime/Reflection/ILRuntimeFieldInfo.cs +++ b/ILRuntime/Reflection/ILRuntimeFieldInfo.cs @@ -177,6 +177,8 @@ public override object GetValue(object obj) ILTypeInstance ins; if (isStatic) { + if (definition.HasConstant) + return definition.Constant; ins = ilType.StaticInstance; } else diff --git a/TestCases/ReflectionTest.cs b/TestCases/ReflectionTest.cs index b2e24209..01ccc892 100644 --- a/TestCases/ReflectionTest.cs +++ b/TestCases/ReflectionTest.cs @@ -65,13 +65,19 @@ public static void ReflectionTest04() public static void ReflectionTest05() { var fi = typeof(TestCls).GetField("aa", BindingFlags.NonPublic | BindingFlags.Instance); - var fi2 = typeof(TestCls).GetField("bb", BindingFlags.NonPublic | BindingFlags.Static); + var fi2 = typeof(TestCls).GetField("bb", BindingFlags.NonPublic | BindingFlags.Static); + var fi3 = typeof(TestCls).GetField("cc", BindingFlags.NonPublic | BindingFlags.Static); var a = new TestCls(); Console.WriteLine("aa=" + fi.GetValue(a)); Console.WriteLine("bb=" + fi2.GetValue(null)); + var cc = (int)fi3.GetValue(null); + Console.WriteLine("cc=" + cc); + if(cc!=444) + throw new Exception("worng value"); + fi.SetValue(a, 123); fi2.SetValue(null, 233); Console.WriteLine("aa=" + fi.GetValue(a)); @@ -198,6 +204,9 @@ public class TestCls int aa = 203; static int bb = 333; + + const int cc = 444; + public TestCls foo(int b) { Console.WriteLine("foo" + (aa + b));