首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >D编程语言中的类C#事件

D编程语言中的类C#事件
EN

Stack Overflow用户
提问于 2011-01-26 23:56:45
回答 5查看 1.5K关注 0票数 10

我最近在一家公司完成了为期6个月的实习,该公司的大部分编程都使用C#。在这段时间里,我第一次使用并习惯了C#处理事件的方式。如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
acc.AccountBalanceLow += new AccountBalanceDelegate(atm.AccountToLow);
acc.AccountBalanceLow +=new AccountBalanceDelegate(atm.AccountToLowAgain);

D支持这样的构造吗?我想用户可以通过使用操作符重载来创建一个,但我不能完全确定。如果不可能,那么什么是常见的例外方式呢?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-01-27 00:00:17

D中的等效构造是使用Signals and Slots。这是实现Observer Pattern的另一种方式,这实际上就是C#事件所做的事情。

票数 11
EN

Stack Overflow用户

发布于 2011-01-27 00:00:15

D(和C++)使用一种类似的模式,称为signals and slots

票数 4
EN

Stack Overflow用户

发布于 2011-01-28 17:03:00

如果您觉得需要使用C#样式的事件而不是信号和插槽,那么它们的实现非常简单:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
module fluidity.core.event;

class Event {
    alias void delegate(EventArgs) handler_t;

    handler_t[] handlers;
    Object owner;

    this() {}
    this(Object o) { owner = o; }

    void attach(handler_t handler) {
        if (handler)
            handlers ~= handler;
    }

    void detach(handler_t handler) {
        int i = -1;
        foreach (j, h; handlers)
        {
            if (h is handler)
            {
                i = j;
                break;
            }
        }

        if (i > -1)
            handlers = handlers[0..i] ~ handlers[i+1..$];
    }

    void raise() { raise(new EventArgs(owner)); }
    void raise(EventArgs e) {
        // call all handlers
        foreach (handler; handlers)
        {
            if (handler)
                handler(e);
        }
    }

    void opAddAssign(handler_t handler) {
        attach(handler);
    }

    void opSubAssign(handler_t handler) {
        detach(handler);
    }

}

class EventArgs {
    Object source;
    bool handled;

    void handle() { handled = true; }

    this() {}
    this(Object s) {
        source = s;
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4811556

复制
相关文章
【点滴】在 promise 中 then 和 finally 有什么区别
看上去 promise.prototype.then() 和 promise.prototype.finally 似乎非常相似。但是你需要明白它们有一些重要的差异。
疯狂的技术宅
2021/04/01
2.4K0
解读 | IaaS、PaaS和SaaS之间有什么区别?
随着时间的推移,云计算技术对于组织来说变得越来越重要。在大量的应用程序运行在不同的云模型时,组织需要做一些工作来检查这些解决方案是否更能满足其需求。组织需要确定其投资组合中的每个应用程序都在为自己和最终用户而使用正确的云模型。
CloudBest
2020/09/30
1.9K0
解读 | IaaS、PaaS和SaaS之间有什么区别?
c++和c语言之间有什么区别
  C语言是一种古老而又经久不衰的计算机程序设计语言,大约诞生于上个世纪60年代。由于它的设计有很多优点,多年以来深受广大程序设计人员的喜爱,并逐渐 淘汰了很多其它程序设计语言。我们平时使用的大多数软件都是用C语言开发的。
诸葛青云
2019/11/11
2.3K0
c++和c语言之间有什么区别
JavaScript 中 == 和 === 有什么区别?
双等号(==) 符号检查松散相等,而三等号(===) 符号检查严格相等。不同之处在于 (==) 松散相等将在进行比较之前尝试通过类型强制解析数据类型,而 (===) 严格相等将在数据类型不同时返回 false。下面我来给大家一些例子以便更好地理解它们。
海拥
2022/04/13
9740
云计算、大数据和物联网之间,有什么区别和联系?[通俗易懂]
随着大数据概念的提出,云计算中的分布式计算技术开始更多地被列入大数据技术,而人们提到云计算时,更多指的是底层基础IT资源的整合优化以及以服务的方式提供IT资源的商业模(如Iaas、PaaS、SaaS)。
全栈程序员站长
2022/11/08
8580
人工智能 | 美国和中国研究领域之间的隔阂有多严重!!?
引言 美国和中国研究领域之间的隔阂有多严重?今天给大家分享的这篇文章,通过对NeurIPS的引文数据进行分析发现,欧美研究机构也很少引用了中国的研究成果,而中国也很少引用欧美的研究成果,进而探寻讨
ShuYini
2022/12/06
2910
人工智能 | 美国和中国研究领域之间的隔阂有多严重!!?
什么是Hypervisor?Type 1 和Type 2 之间有什么区别?
在了解 Type 1 和 Type 2 Hypervisor 之间的区别以及哪个更好之前,让我们先看看 Hypervisor 是什么?
网络技术联盟站
2021/11/19
6.2K0
什么是Hypervisor?Type  1 和Type  2 之间有什么区别?
React篇(039)-Shadow DOM 和 Virtual DOM 之间有什么区别?
Shadow DOM 是一种浏览器技术,它解决了构建网络应用的脆弱性问题。Shadow DOM 修复了 CSS 和 DOM。它在网络平台中引入作用域样式。无需工具或命名约定,你即可使用原生 JavaScript 捆绑 CSS 和标记、隐藏实现详情以及编写独立的组件。Virtual DOM 是一个由 JavaScript 库在浏览器 API 之上实现的概念。
齐丶先丶森
2022/05/12
4320
php中的<?= ?>和<?php ?>有什么区别么?
大家好,又见面了,我是全栈君。 <? ?>是短标签 <?php ?>是长标签 在php的配置文件(php.ini)中有一个short_open_tag的值,开启以后可以使用PHP的短标签:<? ?>
全栈程序员站长
2022/07/11
1.2K0
.Net中Finalize()和Dispose()有什么区别?
Finalize自动释放资源,Dispose()用于手动释放资源。 释放类所使用的未托管资源的两种方式: 1.利用运行库强制执行的析构函数,但析构函数的执行是不确定的,而且,由于垃圾收集器的工作方式,它会给运行库增加不可接受的系统开销。 2.IDisposable接口提供了一种机制,允许类的用户控制释放资源的时间,但需要确保执行Dispose()。 一般情况下,最好的方法是执行这两种机制,获得这两种机制的优点,克服其缺点。假定大多数程序员都能正确调用Dispos
程序你好
2018/07/20
1.5K0
MyBatis配置中的#{}和${}有什么区别?
前几天,一位应届生去面试,被问到一个MyBatis中比较基础的问题,说MyBatis中的#号和$符号有什么区别?今天,我给大家来详细介绍一下。
Tom弹架构
2022/08/22
2.7K0
MyBatis配置中的#{}和${}有什么区别?
Java 中 CycliBarriar 和 CountdownLatch 有什么区别?
CyclicBarrier和CountDownLatch都是Java中常用的多线程同步工具,它们主要用来协调多个线程之间的行为,以便达到某种共同目标。虽然它们有一些相似之处,但在应用场景和使用方法上也存在着比较明显的区别。
用户1289394
2023/08/22
1690
Java 中 CycliBarriar 和 CountdownLatch 有什么区别?
TypeScript 中 type 和 interface 有什么区别?
大家好,我是前端西瓜哥,今天我们来看看 type 和 interface 的区别。
前端西瓜哥
2022/12/21
6460
Java中SynchronizedMap 和 ConcurrentHashMap有什么区别?
Java 中 SynchronizedMap 和 ConcurrentHashMap 都是线程安全的 Map 实现。它们通过不同的锁机制来保证多线程情况下对 Map 的操作正确性和并发性。
用户1289394
2023/08/22
2820
Java中SynchronizedMap 和 ConcurrentHashMap有什么区别?
【说站】java中&和&&有什么区别
1、&&只要有一个条件不一样就是不满足,如果第一个条件就是不满足就不判断后面的条件。而&要对所有的条件都进行判断。
很酷的站长
2022/11/24
6780
【说站】java中&和&&有什么区别
Android中Aop和Apt有什么区别?
AOP指的是:面向切面编程(Aspect-Oriented Programming)。如果说,OOP如果是把问题划分到单个模块的话,那么AOP就是把涉及到众多模块的某一类问题进行统一管理。
乱码三千
2021/07/29
1.4K0
Android中Aop和Apt有什么区别?
在 Linux 中如何强制停止进程?kill 和 killall 命令有什么区别?
在日常工作中,您会遇到两个用于在 Linux 中强制结束程序的命令;kill和killall。
网络技术联盟站
2022/04/02
3.5K0
在 Linux 中如何强制停止进程?kill 和 killall 命令有什么区别?
防火墙、IDS、IPS之间有什么区别?
1、基础防火墙类:主要是可实现基本包过滤策略的防火墙,这类是有硬件处理、软件处理等,其主要功能实现是限制对IP:port的访问。基本上的实现都是默认情况下关闭所有的通过型访问,只开放允许访问的策略。
网络安全观
2021/02/25
5.4K0
防火墙、IDS、IPS之间有什么区别?
点击加载更多

相似问题

错误:系统找不到指定的文件

31

错误-系统找不到指定的文件

130

Arduino:系统找不到指定的文件错误

12

CreateProcess错误,系统找不到指定的文件

12

python错误:系统找不到指定的文件

26
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文