//------------------------------------------------------------------------------------- /// <summary> /// Вовзращает строковое значение свойства для указанного объекта, содержащего коллекцию значений свойств. /// </summary> /// <param name="obj">Объект, содержащий коллекцию значений свойств.</param> /// <param name="selfOnly">Определяет, возвращать ли значения наследуемых всойств</param> /// <returns></returns> public virtual string GetValueAsString(IPulsarPropertiesValuesContainer obj, bool selfOnly = false) { return ValueToString(GetValue(obj, selfOnly)); }
//------------------------------------------------------------------------------------- /// <summary> /// Устанавливает значение свойства для указанного объекта, содержащего коллекцию значений свойств. /// </summary> /// <param name="obj">Объект, содержащий коллекцию значений свойств.</param> /// <param name="value">Устанавливаемое значение.</param> /// <returns></returns> public virtual void SetValue(IPulsarPropertiesValuesContainer obj, object value) { if(obj == null) throw new ArgumentNullException("obj"); if(obj.PropertiesValues == null) throw new PulsarException("У объекта [{0}] не определена коллекция значений свойств!"); BeginRead(); if(value != null && Type == PulsarPropertyType.Enum && Enums is IKeyedList && IsListValue == false) { UInt key = 0; if(value is UInt) { key = (UInt)value; if(((IKeyedList)Enums).ContainsKey(key) == false) key = 0; } else key = ((IKeyedList)Enums).KeyOf(value); if(key == 0) throw new PulsarException("Не найден ключ элемента [{0}] свойства [{1}]!", value, this); value = key; } if(Type == PulsarPropertyType.Check && value != null) value = (byte)1; if(obj is IReadWriteLockObject && ((IReadWriteLockObject)obj).IsWriteLocked == false) ((IReadWriteLockObject)obj).BeginWrite(); obj.PropertiesValues.DirectInject(this, value); }
//------------------------------------------------------------------------------------- /// <summary> /// Вовзращает значение свойства для указанного объекта, содержащего коллекцию значений свойств. /// </summary> /// <param name="obj">Объект, содержащий коллекцию значений свойств.</param> /// <param name="selfOnly">Определяет, возвращать ли значения наследуемых всойств</param> /// <returns></returns> public virtual object GetValue(IPulsarPropertiesValuesContainer obj, bool selfOnly = false) { BeginRead(); if(obj == null) throw new ArgumentNullException("obj"); if(obj is IReadWriteLockObject && ((IReadWriteLockObject)obj).IsReadLocked == false) ((IReadWriteLockObject)obj).BeginRead(); if(obj.PropertiesValues == null || obj.PropertiesValues[this] == null) return null; return obj.PropertiesValues[this]; }