internal override bool TrySetValue(CodeContext /*!*/ context, object instance, PythonType owner, object value) { Assert.NotNull(context); BoundEvent et = value as BoundEvent; if (et == null || EventInfosDiffer(et)) { BadEventChange bea = value as BadEventChange; if (bea != null) { PythonType dt = bea.Owner as PythonType; if (dt != null) { if (bea.Instance == null) { throw new MissingMemberException(String.Format("attribute '{1}' of '{0}' object is read-only", dt.Name, _tracker.Name)); } else { throw new MissingMemberException(String.Format("'{0}' object has no attribute '{1}'", dt.Name, _tracker.Name)); } } } throw ReadOnlyException(DynamicHelpers.GetPythonTypeFromType(Info.DeclaringType)); } return(true); }
internal override bool TryGetValue(CodeContext /*!*/ context, object instance, PythonType owner, out object value) { Assert.NotNull(context, owner); value = new BoundEvent(this, instance, owner); return(true); }
private bool EventInfosDiffer(BoundEvent et) { // if they're the same object they're the same... if (et.Event.Info == this.Info) { return false; } // otherwise compare based upon type & metadata token (they // differ by ReflectedType) if (et.Event.Info.DeclaringType != Info.DeclaringType || et.Event.Info.MetadataToken != Info.MetadataToken) { return true; } return false; }
private bool EventInfosDiffer(BoundEvent et) { // if they're the same object they're the same... if (et.Event.Info == this.Info) { return(false); } // otherwise compare based upon type & metadata token (they // differ by ReflectedType) if (et.Event.Info.DeclaringType != Info.DeclaringType || et.Event.Info.MetadataToken != Info.MetadataToken) { return(true); } return(false); }
internal override bool TryGetValue(CodeContext/*!*/ context, object instance, PythonType owner, out object value) { Assert.NotNull(context, owner); value = new BoundEvent(this, instance, owner); return true; }