Ejemplo n.º 1
0
                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();
                }
Ejemplo n.º 2
0
                    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));
                    }
Ejemplo n.º 3
0
 internal MetaRumpelstiltskin
     (Expression expression, Rumpelstiltskin creator)
     : base(expression, BindingRestrictions.Empty, creator)
 {
 }