我想我理解C#中委托的概念作为方法的指针,但我找不到任何好的例子来说明使用它们的好主意.有哪些例子要么代表更优雅/更好,要么使用其他方法无法解决?
.NET 1.0委托:
this.myButton.Click += new EventHandler(this.MyMethod);
.NET 2.0委托:
this.myOtherButton.Click += delegate { var res = PerformSomeAction(); if(res > 5) PerformSomeOtherAction(); };
它们似乎很有用.怎么样:
new Thread(new ThreadStart(delegate { // do some worker-thread processing })).Start();
我主要使用for easy asynch编程.使用委托开始一个方法开始...方法如果你想要发射并忘记就很容易.
当接口不可用时,委托也可以像接口一样使用.例如,从COM类,外部.Net类等调用方法.
代表们究竟是什么意思?以下是两种使用方式:
void Foo(Funcf) { //do stuff string s = f(42); // do more stuff }
和
void Bar() { Funcf = delegate(i) { return i.ToString(); } //do stuff string s = f(42); // do more stuff }
第二个问题的一点是,您可以像代表一样即时声明新功能.这可以在很大程度上被lambda表达式取代,并且只要你想要一小段逻辑1)传递给另一个函数,或者2)重复执行,它就很有用.LINQ就是一个很好的例子.每个LINQ函数都使用lambda表达式作为参数,指定行为.例如,如果你有一个,List
那么l.Select(x=>(x.ToString())
将在列表中的每个元素上调用ToString().我写的lambda表达式是作为委托实现的.
第一个案例显示了如何实现Select.你将一个代表作为你的论点,然后在需要时调用它.这允许调用者自定义函数的行为.再次以Select()为例,函数本身保证传递给它的委托将在列表中的每个元素上调用,并返回每个元素的输出.该代表实际上做了什么取决于你.这使它成为一个非常灵活和通用的功能.
当然,它们也用于订阅活动.简而言之,委托允许您引用函数,将它们用作函数调用中的参数,将它们分配给变量以及您想要执行的任何其他操作.