我想得到一个属性的getter,所以我可以传递给一个需要Func的方法.现在我将getter提取到Get方法,并在需要getter函数时使用此方法.
关于背景的几句话:我有A类属性,我有另一个类T,它跟踪A(以及B类,C类等)的一些属性.保持跟踪意味着当T的对象被询问有关被跟踪属性的当前值时,它应该给出这样的信息.
一种方法可能是变更通知机制,但A类不知道跟踪的是什么 - 所以这是非常错误的方法.您必须重写可能被跟踪的所有类.此外,通知必须始终发送,即使跟踪器根本不会被问及值.
简单地传递方法如何读取值(属性的getter)似乎更方便,并且跟踪器将在需要时使用它.没有开销,非常简单.
var getter = typeof(DateTime).GetProperty("Now").GetGetMethod();
var func = Delegate.CreateDelegate(getter, typeof(Func<DateTime>))
as Func<DateTime>;
Run Code Online (Sandbox Code Playgroud)
编译代码,还是反射?作为代表,您可以使用:
Func<Foo, int> func = x => x.SomeValue;
Run Code Online (Sandbox Code Playgroud)
或跟踪特定对象:
Func<int> funct = () => someObj.SomeValue;
Run Code Online (Sandbox Code Playgroud)
通过反射你需要GetGetMethod()和Delegate.CreateDelegate()
| 归档时间: |
|
| 查看次数: |
2636 次 |
| 最近记录: |