社区
C#
帖子详情
C#可以统一处理事件么?像Java里在AddActionListener
andytang555
2011-01-10 07:30:06
C#中像 btn.Click += 这样加事件是很方便,但我现在想统一处理事件,能做到吗?在某一个函数中再来根据参数判断事件的类型?
...全文
264
11
打赏
收藏
C#可以统一处理事件么?像Java里在AddActionListener
C#中像 btn.Click += 这样加事件是很方便,但我现在想统一处理事件,能做到吗?在某一个函数中再来根据参数判断事件的类型?
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
jeven_xiao
2011-01-11
打赏
举报
回复
[Quote=引用 5 楼 yangglemu 的回复:]
那不是又回到WndProc回调函数的老路上去了?
你有多少种不同的事件类型,或者多少种不同的事件产生者,就要有多少个Switch,放弃吧
[/Quote]
+++
andytang555
2011-01-10
打赏
举报
回复
刚刚搜索了下,说delegate其实相当于继承自System.MutlicastDelegate实现了一个类,但我用using,是没有System.MutlicastDelegate类,为什么呢?
andytang555
2011-01-10
打赏
举报
回复
[Quote=引用 8 楼 fangxinggood 的回复:]
控件的事件都可以用 EventHandler 来绑定。那样事件参数就都是object,然后你自己判断sender来转。
[/Quote]
谢谢,这个方法我知道,
btn.Click+=new EventHandler(btn_event);
btn.MouseOver += new EventHandler(btn_event);
...
如此这样我总得写很多个+=吧,我就想知道底层有没有统一的发出机制,通常我们自己引发事件会如下写:
public event TestEventHandler TestEvent;
protected virtual void OnTestEvent(TestEventArgs e)
{
if (TestEvent != null)
TestEvent(this, e);
}
我就是在想,TestEvent(this, e);在执行这一句的时候,其内部有没有去执行一个方法,就是希望TestEevnt(this,e)会相当于某个可override的函数,如TestEvent.dispatch(this,e)<假如有此方法>
机器人
2011-01-10
打赏
举报
回复
控件的事件都可以用 EventHandler 来绑定。那样事件参数就都是object,然后你自己判断sender来转。
xuld
2011-01-10
打赏
举报
回复
统一处理只能自定义事件
这是不必要的
如果是同类事件,可以使用同处理句柄
如果不同类,不能统一。
Win32 消息 使用 WinProc 处理 根据 EventArgs 分开到底是哪个事件
如需统一 ,直接重写
大部分时候, 分开更方便
andytang555
2011-01-10
打赏
举报
回复
[Quote=引用 5 楼 yangglemu 的回复:]
那不是又回到WndProc回调函数的老路上去了?
你有多少种不同的事件类型,或者多少种不同的事件产生者,就要有多少个Switch,放弃吧
[/Quote]
嗯,确实是老路,就是一个技术探讨,因为我之前做AS3的,AS3里每发出一个事件是调用dispatchEvent,然后这个dispatchEvent又可以override,如果要做统一处理,就可以写在override过的dispatchEvent函数里。但C#是用OnXXX()函数来发事件,我就想知道,如果要做统一处理难道只能用WndProc或SendMessage等底层方法?而且,底层方法针对的是Win32消息,如果自己写个类,用OnXX()来发出个事件,那怎么办?
人到中年琐事多
2011-01-10
打赏
举报
回复
那不是又回到WndProc回调函数的老路上去了?
你有多少种不同的事件类型,或者多少种不同的事件产生者,就要有多少个Switch,放弃吧
healer_kx
2011-01-10
打赏
举报
回复
显然C#的比Java的更加强大。。。
wuyq11
2011-01-10
打赏
举报
回复
通过代理操作
public delegate void EventHandler(object sender, System.EventArgs e);
public class Button
{
private EventHandler handler;
public event EventHandler Click {
add { handler += value; }
remove { handler -= value; }
}
}
andytang555
2011-01-10
打赏
举报
回复
楼上没明白我的意思,button有click,还有mouseOver等很多事件,我希望能在一个函数中处理,假如啊,假如c#有如下函数:
Button btn = new Button();
btn.addActionListener(new EventHandler(btn_event));
void btn_event(object sender, object evt)
{
switch (evt)
{
case ...
}
}
wuyq11
2011-01-10
打赏
举报
回复
多个按钮可使用
Button btn=new Buton();
btn.Click += new EventHandler(btn_Click);
void btn_Click(object sender, EventArgs e)
{
Button button = (Button)sender;
}
Java
Lambda表达式详解:从语法到实战优化
Lambda表达式作为
Java
8引入的核心特性,通过函数式编程范式显著提升了代码简洁性。其本质是编译器语法糖,底层通过invokedynamic指令实现,避免了匿名内部类的类文件生成开销。在集合处理、延迟计算等场景中,Lambda与Stream API结合能大幅提升开发效率,但需注意并行流的使用边界和变量捕获规则。从JVM层面看,Lambda通过目标类型推断和运行时绑定实现高效执行,相比传统写法更利于JIT优化。对于日志处理、事件回调等常见场景,合理运用Lambda可以写出更优雅的代码,同时需要注意异常处
Java
实现剪贴板监听与内容自动保存工具
剪贴板是操作系统提供的核心功能组件,用于实现应用程序间的数据交换。其底层原理是通过系统级的内存共享机制,允许不同进程访问同一块数据区域。在
Java
生态中,
java
.awt.datatransfer包提供了跨平台的剪贴板访问能力,结合Swing/AWT可以构建完整的桌面解决方案。这类技术特别适合需要持续收集文本信息的场景,如代码片段管理、研究资料归档等。通过实现ClipboardOwner接口和文件IO操作,开发者可以创建自动化的内容收集工具,有效解决Windows原生剪贴板的历史记录限制问题。实际工程中还需
Java
内部类详解:从原理到实战应用
内部类是
Java
语言中实现封装与代码组织的重要机制,通过在类内部定义另一个类来实现逻辑分组和访问控制。其核心原理在于编译器生成的隐式引用机制,使得内部类可以访问外部类成员。从技术价值看,内部类既能增强封装性,又能实现多重继承的效果,在Android事件处理、集合框架迭代器等场景有广泛应用。特别是在内存敏感场景下,静态内部类相比普通内部类能减少内存开销,而匿名内部类在
Java
8后可通过Lambda表达式简化。理解内部类的实现机制对优化内存使用和提升代码可维护性至关重要,也是
Java
开发者面试中的高频考点。
Lambda表达式核心特性与应用场景解析
Lambda表达式作为函数式编程的核心特性,通过匿名函数的形式实现了代码的简洁性与灵活性。其核心原理是基于函数式接口和类型推断,将代码块作为参数传递,显著提升了集合操作、事件处理等场景的开发效率。在
Java
等现代编程语言中,Lambda与Stream API的结合使得数据处理更加声明式和高效,同时通过方法引用等特性进一步优化了代码结构。典型应用包括集合流式处理、GUI事件回调以及延迟执行等场景,在提升代码可读性的同时,也需要注意变量捕获、异常处理等实践细节。对于开发者而言,掌握Lambda表达式是提升现代编
Java
内部类详解:类型、原理与最佳实践
Java
内部类是面向对象编程中重要的封装机制,通过在类内部定义类实现更紧密的代码组织。从JVM实现原理来看,内部类通过隐式引用和合成方法实现对外部类成员的访问,这种设计既带来了封装优势也需注意内存管理。在工程实践中,内部类广泛应用于事件处理、设计模式实现(如Builder模式)和数据结构封装等场景。特别是成员内部类和匿名内部类在GUI开发中尤为常见,而静态内部类则更适合工具类实现。随着
Java
语言发展,Lambda表达式部分替代了匿名内部类的使用,但理解内部类的工作原理仍是
Java
开发者必备的核心技能。合理
C#
111,128
社区成员
642,536
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章