private void ImplProperty(PropertyInfo pi)
            {
                var propertychangedRaiser = FindOnPropertyChangedMethod(pi);

                // public int IntProperty
                ImplProperty(
                    pi,
                    getter =>
                {
                    // get
                    using (var c = getter.Code())
                    {
                        // return _target.IntProperty;
                        c.Return(_target.Property(pi));
                    }
                },
                    setter =>
                {
                    // set
                    using (var c = setter.Code())
                    {
                        if (propertychangedRaiser == null)
                        {
                            // _target.IntProperty = value;
                            c.Assign(_target.Property(pi), setter.Value);
                            return;
                        }
                        // if (_target.IntProperty != value)
                        c.If(c.AreNotEqual(_target.Property(pi, setter.Args.AsOperands()), setter.Value));
                        {
                            // _target.IntProperty = value;
                            c.Assign(_target.Property(pi), setter.Value);
                            // FirePropertyChanged("IntProperty");
                            c.Call(_proxy.This.Invoke(propertychangedRaiser, g.Const(pi.Name)));
                        }
                        c.End();
                    }
                });
            }