示例#1
0
            public override object GetValue(object obj, object[] index)
            {
                object result = null;

                //always obj == Owner
                Component_InvokeMember c = (Component_InvokeMember)obj;

                //!!!!так?
                if (invoke && !c.FlowSupport)
                {
                    c.Invoke();
                }

                object value;

                if (c.propertyValues.TryGetValue(Signature, out value))
                {
                    //update value for Reference type
                    if (referenceSupport)
                    {
                        //convert from ReferenceNoValue
                        if (value != null && value is ReferenceNoValue)
                        {
                            value = ReferenceUtility.MakeReference(ReferenceUtility.GetUnreferencedType(Type.GetNetType()), ((ReferenceNoValue)value).GetByReference);
                        }

                        IReference iReference = value as IReference;
                        if (iReference != null)
                        {
                            //!!!!try catch? где еще так

                            //get value by reference
                            //!!!!
                            value = iReference.GetValue(obj);
                            //value = iReference.GetValue( Owner );

                            //!!!!?
                            if (!ReadOnly)                             //!!!!new
                            {
                                //!!!!
                                SetValue(obj, value, Indexers);
                                //SetValue( Owner, value, Indexers );
                            }
                        }
                    }
                    result = value;
                }

                //check the type. result can contains value with another type after change the type of property.
                if (result != null && !Type.IsAssignableFrom(MetadataManager.MetadataGetType(result)))
                {
                    result = null;
                }
                if (result == null && Type.GetNetType().IsValueType)
                {
                    result = Type.InvokeInstance(null);
                }

                return(result);
            }
示例#2
0
            public override void SetValue(object obj, object value, object[] index)
            {
                Component_InvokeMember c = (Component_InvokeMember)obj;

                if (value != null)
                {
                    c.propertyValues[Signature] = value;
                }
                else
                {
                    c.propertyValues.Remove(Signature);
                }
            }