zoukankan      html  css  js  c++  java
  • C#,X++事件模型比较

    事件是观察者模式的一种实现,事件源定义事件,监听者订阅事件,在事件触发时事件源通知监听者,并执行监听者定义的处理程序,这样事件的发生和处理分离.
    C#为了实现事件模型,增加了一个类型delegate(委托),事件源用event关键字定义事件,监听者通过+=,-=来订阅或取消订阅事件,订阅的过程实际上是在事件上增加处理函数的入口地址,这样当事件发生时,事件源就会自动调用这些处理函数.
    早在VJ++时代,Anders就在Java上增加了delegate,这激怒了Sun,引发了一场论战,Sun给delegate下了几宗罪,比如,增加了语言的复杂度(因为多了几个关键字),破坏了OO(因为delegate是二等公民,不支持继承),对Java语言本身是有害的.
    有兴趣可以Sun的白皮书:
    About Microsoft's "Delegates"
    MS也不会轻易就速手就擒,下面是MS的反击:
    The Truth About Delegates
    Java通过内联类(Inner Class)来实现事件模型.
    这其实反应了C#之父和Java创始人不同的观念,感觉Anders是实用主义者,而Gosling是完美或者纯粹主义者,C#比Java多了很多特性,比如属性,枚举,委托.这些Gosling都考虑过,但他觉得只要class这个关键字可以实现的都应该用class实现,增加一些关键字会增加语言的复杂度,并且会给程序员的选择带来麻烦.不过做为Anders的Fans,俺当然更喜欢C# style.
    好像跑题了......
    X++没办法实现C#和Java的事件模型,因为它既没有C#的委托,也没有Java中的内联类.所以它的事件只能依托于运行时调用固定的方法,而这些事件都是Form,Report,DataSource等固定的元素上实现的,可以调用的方法就那么几个,没办法扩充,惟一能做的事情是重载父类的方法,实现自己的逻辑,想在自己定义的类上实现事件是没办法的.不过到目前为止,感觉X++的这些事件对于ERP软件来说也够用了,实在不行调用C#写的Assembly就行了.
  • 相关阅读:
    实现一个程序两套快捷键
    SystemC中文教程一
    logback的使用和logback.xml详解
    mysql语句练习50题
    Intellij IDEA中使用Debug调试详解
    用node-webkit把web应用打包成桌面应用
    Idea导入项目详解
    iReport 5.6.0 Error: net.sf.jasperreports.engine.JRException: Error executing SQL statement for : data 最优解决方案
    CentOS 7.X 关闭防火墙
    将 MySQL root 的远程访问密码由空密码改为 password
  • 原文地址:https://www.cnblogs.com/Farseer1215/p/524813.html
Copyright © 2011-2022 走看看