84 lines
1.9 KiB
C#
84 lines
1.9 KiB
C#
|
|
namespace SRF.Helpers
|
|||
|
|
{
|
|||
|
|
using System;
|
|||
|
|
using System.Linq;
|
|||
|
|
using System.Reflection;
|
|||
|
|
|
|||
|
|
public class PropertyReference
|
|||
|
|
{
|
|||
|
|
private readonly PropertyInfo _property;
|
|||
|
|
private readonly object _target;
|
|||
|
|
|
|||
|
|
public PropertyReference(object target, PropertyInfo property)
|
|||
|
|
{
|
|||
|
|
SRDebugUtil.AssertNotNull(target);
|
|||
|
|
|
|||
|
|
_target = target;
|
|||
|
|
_property = property;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public string PropertyName
|
|||
|
|
{
|
|||
|
|
get { return _property.Name; }
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public Type PropertyType
|
|||
|
|
{
|
|||
|
|
get { return _property.PropertyType; }
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public bool CanRead
|
|||
|
|
{
|
|||
|
|
get
|
|||
|
|
{
|
|||
|
|
#if NETFX_CORE
|
|||
|
|
return _property.GetMethod != null && _property.GetMethod.IsPublic;
|
|||
|
|
#else
|
|||
|
|
return _property.GetGetMethod() != null;
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public bool CanWrite
|
|||
|
|
{
|
|||
|
|
get
|
|||
|
|
{
|
|||
|
|
#if NETFX_CORE
|
|||
|
|
return _property.SetMethod != null && _property.SetMethod.IsPublic;
|
|||
|
|
#else
|
|||
|
|
return _property.GetSetMethod() != null;
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public object GetValue()
|
|||
|
|
{
|
|||
|
|
if (_property.CanRead)
|
|||
|
|
{
|
|||
|
|
return SRReflection.GetPropertyValue(_target, _property);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return null;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void SetValue(object value)
|
|||
|
|
{
|
|||
|
|
if (_property.CanWrite)
|
|||
|
|
{
|
|||
|
|
SRReflection.SetPropertyValue(_target, _property, value);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
throw new InvalidOperationException("Can not write to property");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public T GetAttribute<T>() where T : Attribute
|
|||
|
|
{
|
|||
|
|
var attributes = _property.GetCustomAttributes(typeof (T), true).FirstOrDefault();
|
|||
|
|
|
|||
|
|
return attributes as T;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|