public void TestPropertyAccessorBuilders() { var pID = typeof(TestClass).GetProperty("ID", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Static); var pBool = typeof(TestClass).GetProperty("BoolProp", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Static); var pIndexed = typeof(TestClass).GetProperty("Item", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Static); var pStatic = typeof(TestClass).GetProperty("StaticText", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.FlattenHierarchy); var builder = new PropertyAccessorLambdaBuilder(); var getterID = builder.BuildInstanceGetter <TestClass, int>(pID).Compile(); var setterID = builder.BuildInstanceSetter <TestClass, int>(pID).Compile(); //var getterID = builder.BuildGetterExpression(pID).Compile(); //var setterID = builder.BuildSetterExpression(pID).Compile(); var o = new TestClass(1) { BoolProp = true, I = 9 }; var id = getterID.Invoke(o); Assert.True(id.Equals(1)); setterID.Invoke(o, 2); Assert.True(o.GetID() == 2); var getterBool = builder.BuildInstanceGetter <TestClass, bool>(pBool).Compile(); var setterBool = builder.BuildInstanceSetter <TestClass, bool>(pBool).Compile(); var b = getterBool.Invoke(o); Assert.True(b); setterBool.Invoke(o, false); Assert.True(!o.BoolProp); var getterIndex = builder.BuildInstanceGetter <TestClass, long, object, object>(pIndexed).Compile(); var setterIndex = builder.BuildInstanceSetter <TestClass, long, object, object>(pIndexed).Compile(); var idx = getterIndex.Invoke(o, 10, "test"); Assert.True((int)idx == 9); setterIndex.Invoke(o, 10, "test", 20); Assert.True(o.I == 10 && o.S == "test" && o.GetID() == 20); var getterStatic = builder.BuildStaticGetter <string>(pStatic).Compile(); var setterStatic = builder.BuildStaticSetter <string>(pStatic).Compile(); var t = getterStatic.Invoke(); Assert.True(t == "test"); setterStatic.Invoke("test2"); t = getterStatic.Invoke(); Assert.True(t == "test2"); }
private void InitializeSet(bool enableDelegateCaching) { var setMethod = this.PropertyInfo.GetSetMethod(true); if (setMethod == null) { return; } this.CanSet = true; this.IsStatic = setMethod.IsStatic; this.PublicSet = setMethod.IsPublic; if (enableDelegateCaching) { this.Setter = MemberAccessorDelegateBuilder.CachedPropertyBuilder.BuildGenericSetter(this.PropertyInfo); } else { var builder = new PropertyAccessorLambdaBuilder(false); this.Setter = builder.BuildGenericSetter(this.PropertyInfo).Compile(); } }
public PropertyAccessorDelegateBuilder(bool enableCaching) { this.EnableCaching = enableCaching; builder = new PropertyAccessorLambdaBuilder(enableCaching); }
public PropertyAccessorDelegateBuilder() { builder = new PropertyAccessorLambdaBuilder(EnableCaching); }