传递lambda函数而不是值.C#是热切评估的,所以为了推迟执行,以便每个站点重新计算你需要在函数中包装参数所提供的参数.
int blah = 1;
void Foo(Func<int> somethingToDo) {
int result1 = somethingToDo(); // result1 = 100
blah = 5;
int result2 = somethingToDo(); // result = 500
}
Foo(() => blah * 100);
Run Code Online (Sandbox Code Playgroud)
如果您使用的是.NET 4.0,则可以使用Lazy类来获得类似(但不完全相同)的效果. Lazy记住结果,以便重复访问不必重新评估函数.
您可以使用Reflection来做到这一点:
使用系统;
使用系统反射;
类 CallMethodByName
{
字符串名称;
CallMethodByName(字符串名称)
{
this.name = 名称;
}
public void DisplayName() // 按名称调用的方法
{
Console.WriteLine(名称); // 证明我们调用了它
}
静态无效Main()
{
// 实例化该类
CallMethodByName cmbn = new CallMethodByName("CSO");
// 通过名称获取所需的方法:DisplayName
方法信息 方法信息 =
typeof(CallMethodByName).GetMethod("DisplayName");
// 使用实例调用不带参数的方法
methodInfo.Invoke(cmbn, null);
}
}
| 归档时间: |
|
| 查看次数: |
5250 次 |
| 最近记录: |