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); }
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); } }