using System;
namespace RosettaUI
{
///
/// 型とフィールドかプロパティ名から生成されるGetter
///
public static class PropertyOrFieldGetter
{
public static IGetter Create(IGetter getter, string propertyOrFieldName)
{
if (getter == null) return null;
var parentType = getter.ValueType;
var memberType = TypeUtility.GetPropertyOrFieldType(parentType, propertyOrFieldName);
var getterType = typeof(PropertyOrFieldGetter<,>).MakeGenericType(parentType, memberType);
return Activator.CreateInstance(getterType, getter, propertyOrFieldName) as IGetter;
}
}
public class PropertyOrFieldGetter : ChildGetter
{
private readonly Func _getFunc;
public PropertyOrFieldGetter(IGetter parentGetter, string propertyOrFieldName)
: base(parentGetter)
{
(_getFunc, _) = PropertyOrFieldGetterSetter.GetGetterSetter(propertyOrFieldName);
}
protected override TValue GetFromChild(TParent parent)
{
return _getFunc(parent);
}
}
}