
我有一些关于GUI事件处理的基本问题.首先使用C#,我们如何将事件链接到对象 – 我猜测事件处理程序?如果是这样,每个处理程序可以使用单独 – 事件处理程序如何定位它必须 *** 作的对象?
我对JAVA中的工作原理有一个大概的了解.指向我的参考将是好的 – 我已经搜索谷歌的答案无济于事.
非常感谢,
Ĵ
Firstly with C# how can we link events
to objects – I am guessing event
handlers? If so can each handler use
separate code?
是的,每个事件处理程序都有自己的代码:
class A { public event EventHandler SomeEvent;}class B { public B(A a) { a.someEvent += (sender,e) => { Console.Writeline("B's handler"); }; }}class C { public C(A a) { a.someEvent += (sender,e) => { Console.Writeline("C's handler"); }; }} How can the event handler locate the
objects it must manipulate?
我将过多地简化这一点,但事件处理程序本质上是围绕观察者模式的包装器.与任何其他Delegate类型一样的EventHandlers在方法调用列表中保存订阅者列表(参见Delegate.GetInvocationList).你可以这样想:
class EventHandler { linkedList<Action<object,EventArgs>> subscribers = new linkedList<Action<object,EventArgs>>(); public voID Add(Action<object,EventArgs> f) { subscribers.AddLast(f); } public voID Remove(Action<object,EventArgs> f) { subscribers.Remove(f); } public voID Invoke(object sender,EventArgs e) { foreach(Action<object,EventArgs> f in subscribers) f(sender,e); }} (上面的代码与真实事件处理程序类的实际实现细节相去甚远.委托类型是不可变的,因此添加一个处理程序返回一个新的Delegate,添加了处理程序而不是改变处理程序.我相信他们的Add /删除方法也有很多线程伏都教.)
由于委托实例拥有对每个订阅者的引用,因此它可以直接访问它 *** 作的任何对象.
总结以上是内存溢出为你收集整理的基本的GUI事件处理问题C#全部内容,希望文章能够帮你解决基本的GUI事件处理问题C#所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)