ln.types/reflection/ReflectedValue.cs

35 lines
1.1 KiB
C#

using System;
namespace ln.types.reflection
{
public class ReflectedValue
{
public ReflectedValue ReflectedOwner { get; }
public object Owner { get; }
public AttributeDescriptor AttributeDescriptor { get; }
public object Value { get; private set; }
public ReflectedValue(object owner, string attributeName)
{
Owner = owner;
AttributeDescriptor = TypeDescriptor.GetDescriptor(Owner.GetType()).GetAttributeDescriptor(attributeName);
Value = AttributeDescriptor.GetValue(Owner);
}
public ReflectedValue(ReflectedValue reflectedOwner, string attributeName)
{
ReflectedOwner = reflectedOwner;
Owner = reflectedOwner.Value;
AttributeDescriptor = TypeDescriptor.GetDescriptor(Owner.GetType()).GetAttributeDescriptor(attributeName);
Value = AttributeDescriptor.GetValue(Owner);
}
public virtual void Replace(object value)
{
AttributeDescriptor.SetValue(Owner, value);
Value = value;
}
}
}