[英]C# -Closure -Clarification
我正在学习C#。我的意思是说闭包是a construct that can adopt the changes in the environment in which it is defined.
范例:
List<Person> gurus =
new List<Person>()
{
new Person{id=1,Name="Jon Skeet"},
new Person{id=2,Name="Marc Gravell"},
new Person{id=3,Name="Lasse"}
};
void FindPersonByID(int id)
{
gurus.FindAll(delegate(Person x) { return x.id == id; });
}
变量id
在FindPersonByID()的范围内声明,但我们仍然可以在匿名函数内访问局部变量id
(即, delegate(Person x) { return x.id == id; }
delegate(Person x) { return x.id == id; }
(1)我对闭包的理解正确吗?
(2)从闭包中可以获得什么好处?
是的, FindPersonByID
内部的代码通过使用lambda表达式中的参数id
来利用闭包。 严格说来,闭包的定义要复杂一些,但从根本上讲这是正确的。 如果您想了解有关其功能的更多信息,建议您阅读以下文章
闭包的主要优点本质上就是您上面展示的内容。 它使您可以以更自然,直接的方式编写代码,而不必担心lambda表达式如何生成的实现细节(通常)
例如,考虑在闭包缺失时必须编写多少代码
class Helper {
private int _id;
public Helper(int id) {
_id = id;
}
public bool Filter(Person p) {
return p.id == _id;
}
}
void FindPersonsByID(int id) {
Helper helper = new Helper(id);
gurus.FindAll(helper.Filter);
}
所有这些只是为了表达在委托内部使用参数的概念。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.