当前位置:  开发笔记 > 编程语言 > 正文

C# - 有人能告诉我为什么以及在哪里使用代表?

如何解决《C#-有人能告诉我为什么以及在哪里使用代表?》经验,为你挑选了3个好方法。

我想我理解C#中委托的概念作为方法的指针,但我找不到任何好的例子来说明使用它们的好主意.有哪些例子要么代表更优雅/更好,要么使用其他方法无法解决?



1> yfeldblum..:

.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();



2> cjk..:

我主要使用for easy asynch编程.使用委托开始一个方法开始...方法如果你想要发射并忘记就很容易.

当接口不可用时,委托也可以接口一样使用.例如,从COM类,外部.Net类等调用方法.



3> jalf..:

代表们究竟是什么意思?以下是两种使用方式:

void Foo(Func f) {
 //do stuff
 string s = f(42);
 // do more stuff
}

void Bar() {
 Func f = delegate(i) { return i.ToString(); } 
//do stuff
 string s = f(42);
 // do more stuff
}

第二个问题的一点是,您可以像代表一样即时声明新功能.这可以在很大程度上被lambda表达式取代,并且只要你想要一小段逻辑1)传递给另一个函数,或者2)重复执行,它就很有用.LINQ就是一个很好的例子.每个LINQ函数都使用lambda表达式作为参数,指定行为.例如,如果你有一个,List l那么l.Select(x=>(x.ToString())将在列表中的每个元素上调用ToString().我写的lambda表达式是作为委托实现的.

第一个案例显示了如何实现Select.你将一个代表作为你的论点,然后在需要时调用它.这允许调用者自定义函数的行为.再次以Select()为例,函数本身保证传递给它的委托将在列表中的每个元素上调用,并返回每个元素的输出.该代表实际上了什么取决于你.这使它成为一个非常灵活和通用的功能.

当然,它们也用于订阅活动.简而言之,委托允许您引用函数,将它们用作函数调用中的参数,将它们分配给变量以及您想要执行的任何其他操作.

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有