コード例 #1
0
        /// <summary>
        /// 为获取成员值的操作提供实现。从 <see cref="T:System.Dynamic.DynamicObject"/> 类派生的类可以重写此方法,以便为诸如获取属性值这样的操作指定动态行为。
        /// </summary>
        /// <returns>
        /// 如果此操作成功,则为 true;否则为 false。如果此方法返回 false,则该语言的运行时联编程序将决定行为。(大多数情况下,将引发运行时异常。)
        /// </returns>
        /// <param name="binder">提供有关调用了动态操作的对象的信息。binder.Name 属性提供针对其执行动态操作的成员的名称。例如,对于 Console.WriteLine(sampleObject.SampleProperty) 语句(其中 sampleObject 是派生自 <see cref="T:System.Dynamic.DynamicObject"/> 类的类的一个实例),binder.Name 将返回“SampleProperty”。binder.IgnoreCase 属性指定成员名称是否区分大小写。</param><param name="result">获取操作的结果。例如,如果为某个属性调用该方法,则可以为 <paramref name="result"/> 指派该属性值。</param>
        public override bool TryGetMember(GetMemberBinder binder, out object result)
        {
            var name = binder.Name;

            if (base.TryGetMember(binder, out result) && (null != result))
                return true;
            result = new ZoneOnDemand(_zoneFactory, this, name);
            TrySetMemberImpl(name, result);

            return true;
        }
コード例 #2
0
        /// <summary>
        /// 为获取成员值的操作提供实现。从 <see cref="T:System.Dynamic.DynamicObject"/> 类派生的类可以重写此方法,以便为诸如获取属性值这样的操作指定动态行为。
        /// </summary>
        /// <returns>
        /// 如果此操作成功,则为 true;否则为 false。如果此方法返回 false,则该语言的运行时联编程序将决定行为。(大多数情况下,将引发运行时异常。)
        /// </returns>
        /// <param name="binder">提供有关调用了动态操作的对象的信息。binder.Name 属性提供针对其执行动态操作的成员的名称。例如,对于 Console.WriteLine(sampleObject.SampleProperty) 语句(其中 sampleObject 是派生自 <see cref="T:System.Dynamic.DynamicObject"/> 类的类的一个实例),binder.Name 将返回“SampleProperty”。binder.IgnoreCase 属性指定成员名称是否区分大小写。</param><param name="result">获取操作的结果。例如,如果为某个属性调用该方法,则可以为 <paramref name="result"/> 指派该属性值。</param>
        public override bool TryGetMember(GetMemberBinder binder, out object result)
        {
            var name = binder.Name;

            if (base.TryGetMember(binder, out result) && (null != result))
            {
                return(true);
            }
            result = new ZoneOnDemand(_zoneFactory, this, name);
            TrySetMemberImpl(name, result);

            return(true);
        }
コード例 #3
0
        /*/// <summary>
         * /// 为获取成员值的操作提供实现。从 <see cref="T:System.Dynamic.DynamicObject"/> 类派生的类可以重写此方法,以便为诸如获取属性值这样的操作指定动态行为。
         * /// </summary>
         * /// <returns>
         * /// 如果此操作成功,则为 true;否则为 false。如果此方法返回 false,则该语言的运行时联编程序将决定行为。(大多数情况下,将引发运行时异常。)
         * /// </returns>
         * /// <param name="binder">提供有关调用了动态操作的对象的信息。binder.Name 属性提供针对其执行动态操作的成员的名称。例如,对于 Console.WriteLine(sampleObject.SampleProperty) 语句(其中 sampleObject 是派生自 <see cref="T:System.Dynamic.DynamicObject"/> 类的类的一个实例),binder.Name 将返回“SampleProperty”。binder.IgnoreCase 属性指定成员名称是否区分大小写。</param><param name="result">获取操作的结果。例如,如果为某个属性调用该方法,则可以为 <paramref name="result"/> 指派该属性值。</param>
         * public override bool TryGetMember(GetMemberBinder binder, out object result)
         * {
         *  return TryGetMemberImpl(binder.Name, out result);
         * }*/

        /// <summary>
        /// 尝试获取成员值。
        /// </summary>
        /// <param name="name">成员名称。</param>
        /// <param name="result">成员值。</param>
        /// <returns>如果成功返回true,否则返回false。</returns>
        protected override bool TryGetMemberImpl(string name, out object result)
        {
            var parentMember = ((dynamic)_parent)[name];

            if (parentMember == null)
            {
                result = new ZoneOnDemand(_zoneFactory, _parent, name);
                return(true);
            }

            result = parentMember;
            return(true);
        }
コード例 #4
0
        /*/// <summary>
        /// 为获取成员值的操作提供实现。从 <see cref="T:System.Dynamic.DynamicObject"/> 类派生的类可以重写此方法,以便为诸如获取属性值这样的操作指定动态行为。
        /// </summary>
        /// <returns>
        /// 如果此操作成功,则为 true;否则为 false。如果此方法返回 false,则该语言的运行时联编程序将决定行为。(大多数情况下,将引发运行时异常。)
        /// </returns>
        /// <param name="binder">提供有关调用了动态操作的对象的信息。binder.Name 属性提供针对其执行动态操作的成员的名称。例如,对于 Console.WriteLine(sampleObject.SampleProperty) 语句(其中 sampleObject 是派生自 <see cref="T:System.Dynamic.DynamicObject"/> 类的类的一个实例),binder.Name 将返回“SampleProperty”。binder.IgnoreCase 属性指定成员名称是否区分大小写。</param><param name="result">获取操作的结果。例如,如果为某个属性调用该方法,则可以为 <paramref name="result"/> 指派该属性值。</param>
        public override bool TryGetMember(GetMemberBinder binder, out object result)
        {
            return TryGetMemberImpl(binder.Name, out result);
        }*/
        /// <summary>
        /// 尝试获取成员值。
        /// </summary>
        /// <param name="name">成员名称。</param>
        /// <param name="result">成员值。</param>
        /// <returns>如果成功返回true,否则返回false。</returns>
        protected override bool TryGetMemberImpl(string name, out object result)
        {
            var parentMember = ((dynamic)_parent)[name];
            if (parentMember == null)
            {
                result = new ZoneOnDemand(_zoneFactory, _parent, name);
                return true;
            }

            result = parentMember;
            return true;
        }