这取决于。在我的回答中,我假设两件事:
- 您的类型“T”是您的类的类型(我现在将其表示为 TClass)
- “object”类型是您的属性的类型(我现在将其表示为 TProperty)
因为您的属性是非静态的,所以有两种可能:
- 附加了目标(实例)的“普通”委托。
- 一个“打开”委托,其中需要一个目标作为委托的第一个输入参数。
创建这种“普通”委托的函数如下:
static public Action<TClass, TProperty> CreateSetPropertyDelegate<TClass, TProperty>(this PropertyInfo propertyInfo)
{
return (Action<TClass, TProperty>)Delegate.CreateDelegate(typeof(Action<TClass, TProperty>), propertyInfo.GetSetMethod());
}
并且在使用中(假设属性类型是int类型):
Action<int> setter = typeof(MyClass).GetProperty("MyProperty").CreateSetPropertyDelegate<MyClass, int>(myInsance);
setter(myPropertyValue);
创建开放委托的函数:
static public Action<TClass, TProperty> CreateSetPropertyDelegate<TClass, TProperty>(this PropertyInfo propertyInfo)
{
return (Action<TClass, TProperty>)Delegate.CreateDelegate(typeof(Action<TClass, TProperty>), propertyInfo.GetSetMethod());
}
并在使用中:
Action<MyClass, int> setter = typeof(MyClass).GetProperty("MyProperty").CreateSetPropertyDelegate<MyClass, int>();
setter(myInsance, myPropertyValue);