C#基础:委托、匿名方法、事件

委托:帮助别人完成某类事情的一种机制。

使用委托的步骤:

1、定义委托

  关键字:delegate

  语法:[访问修饰符] delegate 返回值类型 委托名([参数列表])

2、实例化委托:将委托指向或引用某个方法,委托定义后必须实例化才能被调用

注意:

委托可以指向实例方法也可以指向静态方法,如果方法是静态的,则在main方法中不需要对象

实例化委托时的参数仅仅是方法名,所以不能加“()”,更不能传参数

3、使用委托

匿名方法

匿名方法使用委托的语法:

委托类型 委托实例 =delegate([参数列表])

{

代码块

};//分号绝对不能少

 

事件

1.定义事件:使用event关键字

语法:[访问修饰符] event 委托名 事件名;

2、订阅事件

 语法:事件名+=new 委托(事件处理方法名)

3、引发事件

语法:事件名([参数列表]);

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

namespace Test
{
    //定义委托
    public delegate int Callback(int num1,int num2);
     class MathCalc
     {
         public int Plus(int number1, int number2)
         {
             return number1 + number2;
         }
         public int Minus(int number1, int number2)
         {
             return number1 - number2;
         }
     }
    //事件例子
     public class Teacher//教师类
     {
         //定义一个委托和一个事件
         public delegate void ListenreEventHandler();
         public event ListenreEventHandler ListenerEvent; 
         //定义引发事件的方法
         public void BeginClass()
         {
             Console.WriteLine("教师宣布上课!");
             if (ListenerEvent != null)
             {
                 ListenerEvent();//引发事件
             }
            
         }
     }
     public class Student//学生类
     {
         private string stuName;
         public Student(string name)

         {
             this.stuName = name;
         }
         public void Listener()
         {
             Console.WriteLine("学生:"+stuName+",正在听课!");
         }
         public void Record()
         {
             Console.WriteLine("学生:" + stuName + ",正在做笔记!");
         }
         public void Sleep()
         {
             Console.WriteLine("学生:" + stuName + ",正在睡觉!");
         }
     }


    class Program
    {
        static void Main(string[] args)
        {
            MathCalc mc = new MathCalc();
            //声明并实例化委托
            Callback cb = new Callback(mc.Plus);
            //调用委托
            int result = cb(1, 2);
            Console.WriteLine("1+2="+result);

            //使用匿名方法
            int thrid = 10;
            Callback calladd = delegate(int first, int second)
            {
                int sum = first + second;
                return sum;
            };
            int total = calladd(10, 20) + thrid;//调用委托
            Console.WriteLine("10+20+10="+total);

            Teacher t = new Teacher();
            Student stu1 = new Student("张三");
            Student stu2 = new Student("李四");
            Student stu3 = new Student("王五");

            t.ListenerEvent += new Teacher.ListenreEventHandler(stu1.Record);
            t.ListenerEvent+=new Teacher.ListenreEventHandler(stu2.Listener);
            t.ListenerEvent+=new Teacher.ListenreEventHandler(stu3.Sleep);
            t.BeginClass();//触发事件

        }
    }
}

 

 

 

 

posted @ 2012-04-22 23:32  穿旗袍的女人  阅读(187)  评论(0编辑  收藏  举报