chicken_dy/Assets/ThirdPlugins/StompyRobot/SRF/Scripts/Helpers/PropertyReference.cs

84 lines
1.9 KiB
C#
Raw Permalink Normal View History

2022-01-26 07:46:33 +00:00
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;
}
}
}