.net自定义事件示例分享

1、新建一个控制台应用程序TestDelegate,本项目主要实现:热水器加热,报警器监控,当热水温度达到80度的时候报警器报警这样一个简单的事件处理程序

2、定义委托处理程序

代码如下:

public delegate void PlayGameHandler(object sender, System.EventArgs e);

3、添加一个报警器类,报警方法只有在温度超过80度的时候会被调用

代码如下:

// 负责报警的人
    public class 报警器
    {
        public 报警器()
        {
            Console.WriteLine("生成报警器...");
        }
        public void 报警(object sender, EventArgs e)
        {
            System.Threading.Thread.Sleep(100);//休息0.1秒
            Console.WriteLine("滴滴。。。。温度超过80度...");
        }
    }

4、添加一个热水器类,利用循环加热热水器,从一度增加到100度,当温度超过80度时候触发事件报警

代码如下:

// 如果加热,则引发事件
    public class 热水器
    {
        // 先定义一个事件,这个事件表示“热水器”在加热。
        public event PlayGameHandler PlayGame;
        public 热水器()
        {
            Console.WriteLine("生成热水器....");
        }

public void 加热()
        {
            Console.WriteLine("开始加热了.....");
            System.EventArgs e = new EventArgs();
            for (int i = 1; i < 101;i++)//温度每增加一度调触发一次事件
            {
                System.Threading.Thread.Sleep(100);//休息0.1秒
                Console.WriteLine(i.ToString()+"度");
                if (PlayGame != null)
                {
                    if(i>=80)//当温度大于80度
                    PlayGame(this, e);//触发事件
                }
            }

}
    }

5、客户端开始调用

代码如下:

public class Program
    {
        //[STAThread]
        public static void Main(string[] args)
        {
            Console.WriteLine("场景开始了....");
            报警器 w = new 报警器();
            热水器 z = new 热水器();

// 指定监视
            z.PlayGame += new PlayGameHandler(w.报警);
            System.Threading.Thread.Sleep(1000);
            // 开始加热
            z.加热();
            Console.WriteLine("场景结束...");
            Console.ReadLine();
        }

}

大家运行一下可以看到更多数据显示

(0)

相关推荐

  • .net泛型通用函数的特殊问题的解决方法

    自从2.0版本的net framework推出之后泛型(Generic)得到了广泛好评.它不必像object类型一样性能上因为"拆箱"或者"装箱"得到损失,同时在编译语法检测阶段就可以实时检测出传入或者传出的类型是否符合特定条件. 但"金无赤足,人无完人"--在我们享受这些幸福编程的同时,泛型自身类型的不确定也带来了一个显著的问题--无法进行运算符重载.譬如现在我要写一个函数(一个通用的选择排序算法,使用泛型T),该怎么办呢?如果你简单使用这样的

  • ASP.Net巧用窗体母版页实例

    本文实例讲述了ASP.Net巧用窗体母版页的方法.分享给大家供大家参考.具体分析如下: 背景:每个网页的基本框架结构类似: 浏览网站的时候会发现,好多网站中,每个网页的基本框架都是一样的,比如,最上面都是网站的标题,中间是内容,最下面是网站的版权.开发提供商等信息: 在这些网页中,表头.底部的样式和内容都是一样的,不同的只是中间的内容. 因此在制作网站时,可以将这些共同的东西分离出来,放到"窗体母版页"中,在需要的时候嵌套就可以. 巧用窗体母版项: 下面就开始行动(本文是以Visual

  • .NET基础之自定义泛型分析

    本文实例分析了.NET基础之自定义泛型.分享给大家供大家参考.具体分析如下: 在.NET中泛型使用非常频繁,在控制台应用程序中,默认的引入了System.Collection.Generics名称空间,其中就提供了我们经常使用的泛型:List<T>和Dictionary<T>,相信用过它们的都知道它们的强大.还有一种我们经常使用的简单的泛型:System.Nullable<T>,即可空类型.我们可以:   System.Nullable<int> nulla

  • asp.net自定义控件中注册Javascript问题解决方案

    复制代码 代码如下: protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); RenderJS(); } private void RenderJS() { if (!Page.ClientScript.IsClientScriptBlockRegistered(SCRIPT_ID))//如果还没有注册语句,则注册 { Page.ClientScript.RegisterClientScriptBlock(t

  • .NET事件监听机制的局限与扩展分析

    本文实例分析了.NET事件监听机制的局限与扩展.分享给大家供大家参考.具体分析如下: .NET中把"事件"看作一个基本的编程概念,并提供了非常优美的语法支持,对比如下C#和Java代码可以看出两种语言设计思想之间的差异. 复制代码 代码如下: // C# someButton.Click += OnSomeButtonClick; 复制代码 代码如下: // Java someButton.addActionListener(     new ActionListener(){    

  • asp.net自定义分页控件示例

    一..ascx页面 复制代码 代码如下: <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Pagination.ascx.cs" Inherits="IOCS.WEB.UserControl.Pagination" %><link href="../Content/Css/Pager.css" rel="s

  • 使用.NET中的Action及Func泛型委托深入剖析

    委托,在C#编程中占有极其重要的地位,委托可以将函数封装到委托对象中,并且多个委托可以合并为一个委托,委托对象则可以像普通对象一样被存储.传递,之后在任何时刻进行调用,因此,C#中函数回调机制的实现基本上依赖于委托.C#的delegate关键字用于声明委托,它具有将声明委托类型映射到System.Delegate类的能力,System.Delegate类位于mscorlib.dll中,是.NET的基础核心类之一.使用delegate关键字声明一个委托,实质上创建了System.Delegate的

  • .net使用自定义类属性实例

    一般来说,在.net中可以使用Type.GetCustomAttributes获取类上的自定义属性,可以使用PropertyInfo.GetCustomAttributes获取属性信息上的自定义属性.   下面以定义一个简单数据库表的映射实体类来说明相关的使用方法,基于自定义类属性和自定义类中的属性的自定义属性,可以方便的进行类标记和类中属性的标记   创建一个类的自定义属性,用于标识数据库中的表名称,需要继承自Attribute类: 复制代码 代码如下: [AttributeUsage(Att

  • .NET开发基础:从简单的例子理解泛型 分享

    从简单的例子理解泛型话说有家影视公司选拔偶像派男主角,导演说了,男演员,身高是王道.于是有下面代码:  复制代码 代码如下: //男演员实体类public class Boy{    //姓名    private string mName;    //身高    private int mHeight;    public string Name {        get { return this.mName; }    }    public int Height {        get

  • 关于asp.net 自定义分页控件

    这几天空学习了下自定义控件,参考了aspnetpager开发了自己的分页控件.相对aspnetpager来说功能是多,但个人感觉他的代码太多. 界面: 使用: <%@ Register assembly="YSM.AspNetPager" namespace="YSM.AspNetPager" tagprefix="cc1" %> 页面注册控件,也可以在web.config中配置 1.ajax之UpdatePanel分页则把控件放到U

随机推荐