static void Main() { dynamic x = new Rumpelstiltskin("Hermione"); x.Harry(); x.Ron(); x.Herminone(); Console.WriteLine("第二轮测试"); x = new Rumpelstiltskin("Haha"); x.Liu(); x.Haha(25); Console.ReadKey(); }
public override DynamicMetaObject BindInvokeMember (InvokeMemberBinder binder, DynamicMetaObject[] args) { Rumpelstiltskin targetObject = (Rumpelstiltskin)base.Value; Expression self = Expression.Convert(base.Expression, typeof(Rumpelstiltskin)); Expression targetBehavior; if (binder.Name == targetObject.name) { targetBehavior = Expression.Call(self, RightGuessMethod); } else { targetBehavior = Expression.Call(self, WrongGuessMethod, Expression.Constant(binder.Name)); } var restrictions = BindingRestrictions.GetInstanceRestriction (self, targetObject); return(new DynamicMetaObject(targetBehavior, restrictions)); }
internal MetaRumpelstiltskin (Expression expression, Rumpelstiltskin creator) : base(expression, BindingRestrictions.Empty, creator) { }