探讨与比较Java和.NET的事件处理框架-Java基础-Java-编程开发

1、探索.NET基础:解决Windows开发的困境与未来展望 本文深入探讨了Windows开发面临的挑战,以及.NET框架如何通过统一的开发范式、简化的部署模型和增强的安全性解决这些问题。同时,文章还介绍了.NET的具体特性,如元数据与反射、序列化与反序列化、异常处理等,并通过Acme Travel Agency案例展示了其在实际应用中的优势。 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>  事件驱动模型

  事件驱动模型是软件系统平台中的一个重要区域,现代软件系统大量地使用事件驱动的处理方法 ,尤其在用户界面方面。虽然如此,过去在软件开发语言中一直没有融入事件处理的因子,直到.net的出现,才将事件处理的工作负荷一部分的分派给编译 器,从而稍微减轻开发者的负担。

  下图显示事件模型的组成份子:

  Subscriber需事先和publisher预订要接受其发布的某事件(下图a1),publisher在某事件发生以后 ,必需先生成该事件的相关数据对象(下图a2.1),然后通过方法调用来通知subscriber(下图a2.2),也就是用回调(callback)的方式来通知 subscriber。当然在预订的时候,并不一定要由subscriber自身来预订,也可以由另一个对象来帮忙预订。其动态图形示意如下:

  本文并不探讨异步的信息传送,也就是在整个事件的处理过程当中,publisher和subscriber 对象皆 需要同时存在。如果对于离线(offline)的方式来处理事件有兴趣的话,请参阅Java的JMS(Java Message Service)和.NET的LCE(Loosely Coupled Events)。

   事件是什么?

  那么,到底事件是什么?在软件系统中要如何表达一个事件?一个事件应 该包括两个东西:识别事件的名称(event identity),和事件的相关的数据(event data)。例如,一个键盘按键被按下的事件可能叫KeyPressedEvent, 事件数据则为该按键的代码。

  先前提到发布事件是用调用方法的方式(回调),不过有一个问题,就是publisher无法事先知道subscriber 的类型。在Java的编码模式当中,回调可以使用接口模式,也就是publisher必需事先定义好一个在发布事件中使用的接口,subscriber实现该接口中的方 法,publisher则通过调用接口中的方法来完成发布事件的工作。如下图:

  这样,在Java的编码模式中,一个事件的识别名称就是接口名称和其中的方法名称,而事件数据则 自然是接口方法的参数了。Java对于这个接口的命名风格为XXXListener,顾名思义就是某事件的倾听者。例如:
public interface KeyListener extends EventListener {
 public void keyTyped(KeyEvent e);
 public void keyPressed(KeyEvent e);
 public void keyReleased(KeyEvent e);
}
  由于一个接口中可以包含多个方法,所以Java在设计事件的时候,是将一组相关联的事件放在一起, 这样设计的优点是可以很好的将事件做分类,并且在publisher中如果要处理的事件较多的话,可以使用比较少的成员变量来记录subscribers。缺点是如果 subscriber只对事件接口中的部分事件有兴趣,也必需要全盘实现该接口(所以在AWT里有java.awt.event.XXXAdapter抽象辅助类)。另一个缺点则是必需 要为每一类事件定义一个接口类型,即使可能大部分的事件只有极少的方法。

  微软在为C#语言命名的时候,就刻意隐喻C#是从C/C 为基 础发展而得的面向对象程序语言,始祖绝不是Java,所以肯定要保留一些C/C 的语言机制。在C/C 里面对回调的设计方式就是用函数指针,想当然C#也希望直接使用类似函数调用的方式来做为事件发布的方法。如下图:


  所以C#期望使用函数指针类型来作为事件的识别名称,然后用函数的参数来传递事件数据。我们先用一段C 代码来描绘这幅图画 :

Event type definition:
// 定义KeyPressedCallback 为一个函数指针的类型,
// 该函数接受一个整数型参数,无返回值
typedef void (*KeyPressedCallback)(int keyCode);

Publisher:
class Publisher
{
 public KeyPressedCallback KeyPressedSink = null;
 ...
 void FireEvent(int KeyCode)
 {
  if (KeyPressedSink != null)
  (*KeyPressedSink)(keyCode);//callback
 }
}

Subscriber:
void KeyPressedHandler(int keyCode)
{
 ...
}
...
Publisher publisher = new Publisher();
//reGISter
publisher.KeyPressedSink = &KeyPressedHandler;
  一个当代的纯面向对象程序语言,是肯定希望要把造成程序复杂和不易维护的指针给去除的。所以在C#语言机制当中,势必要创造新的元素来取代, 于是delegate(委托)出现了。如下:
Event type definition:

// 定义KeyPressedDelegate 为一个类似函数指针的类型 ,
// 该函数接受一个整数型参数,无返回值
delegate void KeyPressedDelegate(int keyCode);

Publisher:
class Publisher
{
 public KeyPressedDelegate KeyPressed = null;
 ...
 void FireEvent(int KeyCode)
 {
  if (KeyPressed != null)
   KeyPressed(keyCode);
 }
}

Subscriber:
void KeyPressedHandler(int keyCode)
{
 ...
}
...
Publisher publisher = new Publisher();
//register
publisher.KeyPressed = KeyPressedHandler;
  一开始,你可以把KeyPressedDelegate当成是与函数指针相类似的东西,通过它你可以引用一个实例方法或静态方法,就好像引用一 个对象一样。然后可以通过这个delegate直接调用其引用的方法。但是下面你会看到delegate更扩大了其引用能力。

[1] [2] [3]

50、深入解析微软.NET框架 本文深入解析微软的.NET框架,涵盖C#编程语言、ASP.NET以及Web服务支持等核心内容。从公共语言运行时(CLR)的工作原理到C#的高级特性如泛型、异步编程和LINQ;从ASP.NET的MVC模式到Web API和依赖注入的实践应用;再到WCF和RESTful Web服务的互操作性实现,全面展示了.NET框架在现代Web开发中的强大功能和广泛应用。 阅读详情

相关推荐

基于 .NET 框架和 C# 为 EA 交易和指标开发图形界面

简介 自2018年10月起,MQL5支持与 .NET 框架库的本机集成。本机支持意味着放置在.NET库中的类型、方法和类现在可以直接从MQL5程序访问,而无需事先声明调用函数及其参数,也无需对两种语言进行复杂的类型转换。这确实可以被视为一个明确的突破,因为巨大的.NET框架代码库和C语言的强大功能现在对所有MQL5用户都是现成的。 .NET框架功能不受库本身的限制。集成的免费Visual Studio开发环境大大简化了开发过程。例如,您可以使用它在拖放模式下开发一个完整的Windows应用程序,其所有元

JanLEE 748

.NET 基础

一、什么是.NET? 1. 概念   .NET是微软公司下的一个开发平台,.NET核心就是.NET Framwork(是.NET程序开发和运行的环境),在这个平台下可以用不同的语言进行开发,因为.NET是跨语言的一个平台,语言可以是 C#,f#,j#,vb.net 等等。顺便说一下sum公司的JAVA和.NET不同的一点是Java是跨平台的,不跨语言的,.NET跨平台仅限于安卓系统和IOS苹果系统...

来日可期的博客 6726

C# .NET框架实现简单计算器应用指南

本文还有配套的精品资源,点击获取 简介:本文将指导如何利用C#和.NET框架创建一个具备标准和科学模式的简单计算器。计算器包括图形用户界面,支持键盘输入,以及基本和科学计算功能。通过实践,学习C#编程语言和.NET框架的运用,涉及用户界面设计、事件绑定、计算逻辑实现以及用户偏好存储。 1. C#和.NET框架基础介绍 1.1 C#语言概述 C#(发音为 "...

weixin_30661119的博客 1539

C#与其他编程语言的比较

C#是一种平衡性能、安全性和生产力的语言,特别适合微软生态系统内的开发。与Java相比,它更现代;与Python相比,它更高效但不够灵活;与C 相比,它更安全但性能略低;与JavaScript相比,它更适合后端。选择语言应基于项目需求:如果目标是Windows应用或游戏开发,C#是优秀选择;如果是跨平台或快速原型,Python或JavaScript可能更好。总体而言,C#在企业级应用中表现卓越,但需权衡其生态依赖性。

2501_93572898的博客 870

C#编程打造会议策划软件

本文还有配套的精品资源,点击获取 简介:会议策划软件开发是一项关键工作,尤其在IT行业中。本文将详细探讨使用C#开发此类软件的核心技术要点,包括C#编程基础、.NET框架、事件处理、UI设计、数据库交互、多线程编程、网络编程、异常处理、软件架构、单元测试、持续集成/部署(CI/CD)以及版本控制。这些要点涉及从基础语法到高级应用,帮助开发者构建出高效且稳定的会议管理系统。 ...

weixin_31749299的博客 929

VB.NET 实验报告:掌握编程基础与实践

本文还有配套的精品资源,点击获取 简介:VB.NET 实验报告全面介绍了 VB.NET 编程的基础概念、语法和实践应用。通过实际操作,学生将深入学习对象和类、控件和事件处理、数据类型和转换、集合和数组、异常处理、文件操作、数据库访问、LINQ 查询和多线程等关键知识点。本报告提供了代码示例和结果分析,旨在帮助学生提升编程技能和对 VB.NET 的理解。 1. VB.N...

weixin_42511373的博客 940

c#快速入门~在java基础上,知道C#和JAVA 的不同即可

c#快速入门~在java基础上,知道C#和JAVA 的不同即可.

伟庭的博客 2281

C# .Net框架下的可视化计算器程序设计实践

本文还有配套的精品资源,点击获取 简介:本项目利用C#语言和.NET框架,特别是在Visual Studio环境下的Windows Forms,设计并实现了一个具有图形用户界面的计算器程序。学习者将通过此项目深入理解C#面向对象的编程特性、.NET框架的应用程序开发能力、Windows Forms的控件使用,以及可视化编程和事件处理的实践。此外,项目也涵盖了基本算术运算的实...

weixin_33816734的博客 1150

响应式编程框架有哪些

响应式编程框架和库广泛应用于现代高并发和实时系统中。选择框架时应根据具体项目需求、技术栈和性能要求进行权衡。

weixin_44594317的博客 1254

VB基础编程练习题全解

Visual Basic,简称VB,是由微软公司开发的一种事件驱动编程语言,它属于BASIC编程语言的分支之一。VB以其易学易用的特点,在初学者和快速应用开发领域赢得了广泛的关注。自1991年推出第一个版本以来,VB经历了多个版本的迭代,其中VB6和Visual Basic .NET(VB.NET)分别代表了其在传统桌面应用开发和现代.NET框架应用开发中的重要里程碑。VB的特点主要体现在其图形化的开发环境和丰富的控件库,使开发者能够快速搭建界面,实现功能。

weixin_42174098的博客 747

基于C#与Java的高效网站开发框架实战(ASP.NET MVC + Spring MVC)

现代Web应用的快速迭代与复杂业务需求催生了众多成熟的开发框架。在企业级开发领域,C# 与 Java 凭借强大的生态系统、稳定的运行时环境和丰富的第三方支持,长期占据主导地位。C# 依托 .NET 平台,尤其在 Windows 集成、IIS 托管和 ASP.NET MVC 框架下表现出色,具备高效的开发体验与紧密的工具链集成;而 Java 借助 JVM 的跨平台能力,在分布式、高并发场景中广泛应用于大型系统,Spring 框架更是成为事实上的企业级开发标准。

weixin_35871529的博客 692

.NET有哪些微服务框架

.NET有哪些微服务框架

xie__jin__cheng的博客 2058

C#基础与Windows应用开发实战指南

C#(发音为 “看井”)是微软公司于2000年推出的一种面向对象、类型安全的现代编程语言。它是在.NET框架基础上创建的,被设计为可以创建多种应用程序,包括但不限于Windows应用程序、网络应用程序和分布式组件。C#语言将开发的简易性与强大的功能结合在一起,同时提供丰富的库支持。Visual Studio提供了高度可定制的环境,开发者可以根据个人习惯和工作流程来自定义工作界面和设置:工具窗口布局:可以拖动工具窗口到不同的位置,或者将其停靠在界面的边缘。工具窗口可以设置为浮动或者停靠。

weixin_30533301的博客 1058

我是不是应该放弃.net转向java_我为什么从.NET转向Java

我为什么从.NET转向Java自从开始学习计算机以来,所接触的软件基本上都是Microsoft的产品,记得最开始使用的操作系统是MS-DOS 3.1,开发工具是基本DOS的Turbo Pascal、Turbo C、MASM、Borland C++等,进入Windows和.NET平台后,便是清一色的Microsoft工具:Visual Basic和Visual C++,直到现在最新的Visual S...

weixin_35629057的博客 1902

抖音小游戏(IAA)巨量引擎投放指南

摘要:本文详细介绍了在巨量引擎平台投放小游戏广告的完整流程,包括五个关键步骤:1)添加小游戏资产,填写ID等信息并等待审核;2)添加事件管理,配置激活和关键行为事件;3)通过橙子建站创建落地页,设置跳转链接;4)新建广告项目,选择小程序推广目标;5)完成广告创建。

分享前端工程化、AI 应用、Agent 开发与大模型实践! 4505

Comsol 压电换能器声场仿真(远场分析、边界元法优化)

本文详细介绍了在Comsol中使用边界元法进行压电换能器远场声场仿真的高效方法。针对传统有限元法计算远场时内存消耗大、耗时长的问题,文章阐述了边界元法在处理无限域、提升计算效率和精确获取远场指向性方面的核心优势,并提供了从多物理场耦合设置、网格划分策略到求解器配置及结果验证的完整实战指南。

weixin_29045585的博客 408

C#语言详解:.NET框架应用

C#是一种面向对象的编程语言,由Microsoft开发,主要用于.NET框架的开发。它继承了C++和Java的优点,同时摒弃了两者的一些不足,成为了一种易于学习、功能强大的编程语言。C#语言在.NET框架中具有广泛的应用,为开发者提供了强大的功能和性能。本文从多个方面详细阐述了C#语言在.NET框架中的应用,包括窗体应用程序开发、Web应用程序开发、性能优化和生态系统等方面。通过深入了解这些内容,开发者可以更好地掌握C#语言,并在.NET框架中发挥其潜力。

2501_92489105的博客 605

Android应用开发从零到一:基于Kotlin与Jetpack Compose的完整实践指南

移动应用开发的核心在于构建一个架构清晰、可维护且可扩展的应用基础。理解应用架构的原理,如关注点分离和数据驱动UI,是实现高质量应用的关键技术价值。在现代Android开发中,Kotlin语言凭借其空安全特性和协程,能有效提升代码的健壮性与开发效率。Jetpack Compose作为声明式UI框架,代表了UI开发的未来方向,与Kotlin协程深度集成,简化了复杂交互界面的构建。这些技术共同服务于个人任务管理、企业工具等多种应用场景。本文以构建一个完整的个人任务管理应用为例,系统阐述从环境搭建、UI构建、数据持

weixin_32667955的博客 313

比较C#和Java

本文对比了C#与Java这两种编程语言,这两种语言都具有自动垃圾回收以及运行时编译执行的特点,并且两者的语法都有主要继承自C语言/C++,因此二者有很多相似之处。但由于C#是作为C++和Java的混合体而在Java之后所创造的,因此C#相较Java有更多的新语法特征并且引入了一些增强的功能,所以固然两者有其相似性,但是总归还是有诸多不同之处。 对象处理 C#和Java都可以被视作一种类似使用动态分派的类C++的面向对象语言(其中C++又源自于C语言)。但需要注意,这C#和Java并非C或者C++的超集,它们

极客神殿 2294

彻底讲透 SAP 中的 client-safe:从 CDS、AMDP 到 ABAP Cloud 的客户端隔离设计

SAP系统中的client-safe概念定义了技术边界:访问client-dependent数据的对象必须确保只看到单个client数据,而访问client-independent数据的对象则天然满足条件。这一原则直接影响CDS视图、AMDP等核心组件,并与ABAP Cloud开发模型紧密集成。在业务系统中,client isolation要求用户只能看到当前登录client的数据。SAP通过语言版本、对象规则和静态检查强制执行这一约束,特别是在ABAP Cloud开发中,AMDP方法和发布的API必须满足

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3268

无线通信基础:调制与解调技术_(42).7.3.2多进制频移键控解调(MFSK解调)

MFSK解调是一种通过频谱分析和频率检测来恢复数字信号的技术。本文介绍了MFSK解调的基本原理,包括信号接收、频谱分析、频率检测和符号判决。在实际应用中,噪声会对解调性能产生影响,因此引入了信噪比优化和多步判决方法来提高解调的准确性。通过性能评估,可以更好地理解MFSK解调在不同噪声环境下的表现。这些方法和技术为MFSK在实际通信系统中的应用提供了理论和实践基础。

2401_87715305的博客 1319

.net java 优缺点_在Java和.net中我们应该选择谁?分析java和.net的特性和优缺点

在很多网站上,网友都会问一个相同的问题,到底是学Java还是.net,个人有个人的见解。自从.Net问世以来,程序员都很关心的一个问题是「该学Java或.NET」。我也在挣扎,该「该继续Java的研究,或者该开始准备培养.NET的知识」。最好是能两者兼顾,但是每个人的时间都很有限,想要兼顾两者,其实不太容易。投入在.NET 的时间越多,所能花费在Java的时间自然就少了,反之亦然。在信息爆炸的时代...

weixin_42494891的博客 717

如何实现Docker镜像导入导出 ?

摘要: Docker镜像迁移与备份可通过两种方式实现:1)镜像操作(save/load)完整保存分层结构和元数据,适用于完整备份;2)容器操作(export/import)仅保存文件系统快照,适合创建轻量模板。关键区别在于前者保留历史记录和分层,后者生成单层镜像。save/load命令示例:docker save -o nginx.tar nginx:latest,export/import示例:docker export -o container.tar abc123 && docker

weixin_39291964的博客 875
上一篇: 比较 .NET 和 Java-Java基础-Java-编程开发
下一篇: 十年之后 Java技术的新方向-Java基础-Java-编程开发
java169
博客等级 码龄18年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值