Bạn có thể sử dụng sự phản chiếu, bạn có thể nhận được một đối tượng MethodInfo cho người truy cập get/set và gọi đó là phương thức Gọi.
Các mã ví dụ giả định bạn có cả một get và thiết accessors và bạn thực sự cần phải thêm xử lý lỗi nếu bạn muốn sử dụng điều này trong mã sản xuất:
Ví dụ để có được giá trị của tài sản Foo đối tượng obj bạn có thể viết:
value = obj.GetType().GetProperty("Foo").GetAccessors()[0].Invoke(obj,null);
để cài đặt nó:..
obj.GetType().GetProperty("Foo").GetAccessors()[1].Invoke(obj,new object[]{value});
Vì vậy, bạn có thể vượt qua obj.GetType() GetProperty ("Foo") GetAccessors() [0] để phương pháp của bạn và thực thi phương thức Invoke của nó.
một cách dễ dàng hơn là sử dụng phương pháp vô danh (điều này sẽ làm việc trong .net 2.0 hoặc mới hơn), hãy sử dụng một phiên bản sửa đổi một chút ví dụ mã của bạn:
delegate RET FunctionDelegate<T, RET>(T t);
void func<T, RET>(FunctionDelegate<T,RET> function, T param, ...)
{
...
return function(param);
}
cho một tài sản mang tên Foo kiểu int đó là một phần của một SomeClass lớp:
SomeClass obj = new SomeClass();
func<SomeClass,int>(delegate(SomeClass o){return o.Foo;},obj);
Đó là một ý tưởng rất tốt dọc theo nguyên tắc KISS. Thật không may tại thời điểm này tôi không thể sử dụng nó :( Vấn đề là tài sản tôi đang sử dụng không phải là một phần của mã của tôi Và viết một wrapper thêm chi phí tôi không muốn tại thời điểm này –