事件的基本使用

事件的基本使用

声明一个事件很简单,只需在声明一个委托对象时加上event关键字就行。如下:

public delegate void PriceChangedHandler (decimal oldPrice, decimal newPrice);

public class IPhone6
{
    public event PriceChangedHandler PriceChanged;
}

事件的使用和委托完全一样,只是多了些约束。下面是一个简单的事件使用例子:

public delegate void PriceChangedHandler(decimal oldPrice, decimal newPrice);
public class IPhone6 {
    decimal price;
    public event PriceChangedHandler PriceChanged;
    public decimal Price {
        get { return price; }
        set {
            if (price == value) return;
            decimal oldPrice = price;
            price = value;
            // 如果调用列表不为空,则触发。
            if (PriceChanged != null)
                PriceChanged(oldPrice, price);
        }
    }
}
class Program {
    static void Main() {
        IPhone6 iphone6 = new IPhone6() { Price = 5288 };
        // 订阅事件
        iphone6.PriceChanged += iphone6_PriceChanged;
        // 调整价格(事件发生)
        iphone6.Price = 3999;
        Console.ReadKey();
    }
    static void iphone6_PriceChanged(decimal oldPrice, decimal price) {
        Console.WriteLine("年终大促销,iPhone 6 只卖 " + price + " 元, 原价 " + oldPrice + " 元,快来抢!");
    }
}

View Code

运行结果:

有人可能会问,如果把上面的event关键字拿掉,结果不是一样的吗,到底有何不同?

没错可以用事件的地方就一定可以用委托代替。

但事件有一系列规则和约束用以保证程序的安全可控,事件只有 += 和 -= 操作,这样订阅者只能有订阅或取消订阅操作,没有权限执行其它操作。如果是委托,那么订阅者就可以使用 = 来对委托对象重新赋值(其它订阅者全部被取消订阅),甚至将其设置为null,甚至订阅者还可以直接调用委托,这些都是很危险的操作,广播者就失去了独享控制权。

事件保证了程序的安全性和健壮性。

(0)

相关推荐

  • C#标准事件流

    服装价格变动,触发淘宝发布活动和消费者购买衣服事件流 1 public class EventStandard 2 { 3 public class Clothes { 4 5 /// <sum ...

  • 《血疫》改编自真实事件“埃博拉病毒”,看完令人毛孔悚然

    今年上半年,新冠病毒让许多人陷入了恐慌,疫情还未结束,最近又传出了埃博拉病毒重来的消息.不得不说,2020真的很魔幻! 也许许多人还不知道埃博拉病毒到底有多恐怖?<血疫>这部片子就是像我们 ...

  • 这些根据真实事件改编的电影,你看过几部?

    电影源于生活,而生活有时候比电影更狗血. 今天小编就为大家盘点几部今年改编自真实事件的电影,如果说不是电影将这些故事呈现出来,也许我们很难想象,这是事情居然真实的在这个世界发生过. 1,孟买酒店 这部 ...

  • 小委托人|真实事件改编,7岁男孩被后妈虐打致死。

    小委托人|真实事件改编,7岁男孩被后妈虐打致死。

  • 孟买酒店|改编自印度“911”事件,每一秒都令人紧张到窒息。

    比恐怖片更恐怖的永远都是真实事件! 近年来,印度电影总是不断带给我们惊喜. 这一次,<孟买酒店>再次刷新了印度片的高度,整部片子没有载歌载舞没有欢笑,观影过程中,满是令人窒息的紧张感. 大 ...

  • 火工头陀事件后,少林派为什么不能靠七十二绝技迅速崛起?

    作者:萨沙 本文章为萨沙原创,谢绝任何媒体转载 萨沙一本正经的胡说八道第152期 火工头陀事件后,少林派为什么不能靠七十二绝技迅速崛起? 火工头陀事件,竟然使得少林寺,长达70多年一蹶不振. 当昆仑三 ...

  • 长沙中创教育事件:成人高考成绩查询时间

    成人高考简介 成人高等学校招生全国统一考试,简称成人高考,是我国成人高等学校选拔合格的毕业生以进入更高层次学历教育的入学考试,属于国民教育系列教育,已经列入国家招生计划. 成人高考报名时间 考试时间由 ...

  • 悬崖之上背景介绍 悬崖之上历史原型事件是什么

    悬崖之上背景介绍 悬崖之上历史原型事件是什么 时间:2021-04-26 10:09:05 作者:河森堡 来源:网络 <悬崖之上>并不是一部简单的谍战片,背后的历史事件是有原型可寻的.故事 ...

  • 加涅的9个教学事件/学习水平

    你是否曾经对某人进行新流程或技能方面的培训?也许你认为这将是一个简单,直接的任务.但是,一旦你真正开始了会话,它可能会比你预期的要难. 每个人都有不同的学习风格.你如何呈现信息以使受训者或一组受训者有 ...

  • 威迈斯IPO事件

    威迈斯IPO事件,也让很多汽车明白行业未来五年将会出现百年一遇的重大变革,这也是一场淘汰赛. 胜利者将享受全球最大汽车市场的蛋糕失败者将黯然离场,因为特斯拉的出现. 就如当初苹果变革手机产业一样,把所 ...

  • 著名的“五次生物大灭绝”事件

    一.白垩纪-第三纪灭绝事件 (缩写为K-T灭绝): 发生在距今6500万年前白垩纪末期,约75%--80%的物种灭绝.在五次大灭绝中,这一次大灭绝事件最为著名,因长达1.4亿年之久的恐龙时代在此终结而 ...