1。直接调用方法,使用委托,使用事件,它们有什么不同?尤其是委托和事件,感觉使用时差不多啊。
2。跨线程使用事件(委托)它们的执行机制有什么不同吗?一般是怎么执行的?和在同一线程有什么不同?
低级问题请不要鄙视,赐教下啊。
我回答你的第一个问题:委托相当于C语言中的函数指针。举个例子吧:我们之所以能在.aspx页中用<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />这段代码去指定:单击这个按钮时,去执行.cs中的Button1_Click中的代码。就是因为.NET已在定义Button时创建了一个委托,该委托指向的是返回void,参数列表为(object sender, EventArgs e)形式的函数或方法,并且为我们隐藏了类似这样代码Button1.Click+=EventHandler(Button1_Click),Button1.后的Click就是在Button类中定义的事件,EventHandler是Button类中定义的委托,这样委托就将事件和事件处理函数联系起来了。
综上所述,委托和事件的所用是完全不同的,用法上也没有什么相似的地方。建议你去系统的学习下这方面的知识。
第2个问题,我不太明白你要表达的意思。
第二个问题跨线程我不太懂,谈谈第一个问题吧:
委托与方法差不多,它们都是直接调用过程,事件是异步调用过程。
委托好比中介,调用方法可以私有,调用者不必知道调用方法,通过委托来调用该方法,一般用于调用者不知道方法名,方法是动态指定的情况。
事件是异步过程,采用订阅发布原理,事件好比一个列表,如果有订阅者,就将其加入列表中,发布时检查列表有没有订阅者,如果有则触发。
事件可以说就是委托链