码迷,mamicode.com
首页 > Windows程序 > 详细

C#委托,事件最初浅的和最易看懂的学习笔记

时间:2016-06-25 16:28:57      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:

     对于委托和事件,看了不少博文,当时好像都理解了,过了一段时间,又忘记的差不多了。每每如此,感觉自己很笨,记性差,其实是没有深入理解透切,没有按照自己的语言表达出来,当然容易忘记。今天又花了一些时间,好好理解,总结别人的文章,用自己文字概况出来。

    

    总结如下:

委托可以定义任何地方,应该说是委托声明

事件类可以单独放一个地方,包含一些属性

事件一定定义在发布者里面,应该说是事件声明,并在这里做判断注册事件,给事件类属性赋值

订阅者,也就是事件的受理者,它里面有些方法并后续操作。

客户端把发布者与订阅者关联起来。
发布者.事件+=订阅者.方法
或者
发布者.事件+=new 委托声明类.委托(订阅者.方法)
发布者.方法--调用事件的方法

 代码实例

发布者

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace dazilianxi.deleteevent
{
    //商家,发布商品肯定包含一些属性,就是给商品赋值实例化
    public class Provider
    {
        public delegate void DaZheEventHandler(object sender, ProductEventArgs e);//声明委托
        public event DaZheEventHandler DaZhe;//声明事件

        
        protected virtual void FaBuChanPin(ProductEventArgs e)
        {
            if (DaZhe != null)
            {
                this.DaZhe(this, e);//注册事件
            }
        }
        private decimal price = 18000M;
        public void ShangJia(int discout) {//事件赋值
           this.FaBuChanPin(new ProductEventArgs { Price = discout*price/10, ProAddress = "中国广东", ProName = "红日电器", Discount = discout });
        }
    }
}

事件类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace dazilianxi.deleteevent
{
    //事件类,包含商品一些属性
    public class ProductEventArgs : EventArgs
    {
        public decimal Price { get; set; }
        public string ProName { get; set; }
        public string ProAddress { get; set; }
        public int Discount { get; set; }
    }
}

订阅者

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace dazilianxi.deleteevent
{//就是我们,我们有购买行为(方法)
    public class Custome
    {
        public void OnGouMai(object sender,ProductEventArgs e) 
        {
            if (e.Price < 15000M)
            {
                Console.WriteLine("大家快了买,产于" + e.ProAddress + "" + e.ProName + "" + e.Discount + "折了。目前价格是" + e.ProName + "很划算了");
            }
            else {
                OnGuanKan();
            }
        }

        public void OnGuanKan()
        {
            Console.WriteLine("再等等看!");
        }
    }
}

 

客户端

class Program
    {
        static void Main(string[] args)
        {
            //客户端二者关联
            Provider shangjia = new Provider();
            shangjia.DaZhe += new Provider.DaZheEventHandler(new Custome().OnGouMai);//第一种方式
            shangjia.ShangJia(2);

            Provider shangjia2 = new Provider();
            shangjia2.DaZhe += new Custome().OnGouMai;//第二种方式
            shangjia2.ShangJia(9);
       }
}

结果图

技术分享

 

参考:

http://www.cnblogs.com/wudiwushen/archive/2010/04/23/1717829.html

http://www.cnblogs.com/jimmyzhang/archive/2007/09/23/903360.html

 

C#委托,事件最初浅的和最易看懂的学习笔记

标签:

原文地址:http://www.cnblogs.com/xiaohuasan/p/5616474.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!