1.委托

1.1定义及使用

委托是一种动态调用方法的类型,它与类、接口和数组相同属于引用型。

注意事项:
委托实际上定义了一种方法的模板,只要返回值类型和形参列表与该模板一致,就都可用该委托类型进行实例化。

委托对象本质上代表了方法的引用。在.NET Framework 中,委托具有以下特点。
(1)委托类似于 C++函数指针,但与指针不同的是,委托是完全面向对象的、安全的数据类型。
(2)委托允许将方法作为参数进行传递。
(3)委托可用于定义回调方法。
(4)委托可以把多个方法连接在一起,这样在触发事件时,可同时启动多个事件处理程序。

委托(delegate)声明的一般形式:
[访问修饰符] delegate 返回值类型 委托名( [参数列表] );
如:public delegate int Do( int x);
上面的语句声明了一个公开的名为“Do”的委托,该委托返回值类型为整型。
例如:public delegate void wt(int x);
定义一个没有返回值、带有整型参数的x的一个名叫wt的委托。

具体怎么使用接下来看看代码示例:

namespace C练习  
{
    public  delegate void wt(int x);
    class Program
    {
        public static void Add(int x)  //定义了一个静态方法Add,注意该方法的返回值类型和参数与委托的相同
        {
            Console.WriteLine(x+x); //输出x+x的值
        }
        public static void Cheng(int x)//同上
        {
            Console.WriteLine(x*x);
        }
        static void Main(string[] args)
        {
            wt j = Add;  //用委托定义j并调用Add方法
            j += Cheng; //+代表在j的基础上添加Cheng方法
            j -= Cheng;//-代表在j的基础上移除Cheng方法
            j(3);
        }
    }
}

那么输出的结果就为:6

1.2匿名方法:

将代码块作为参数传递,避免单独定义方法。
委托类型 委托变量名 =deletate (){};

namespace C练习
{
    public  delegate void wt(string name);
    class Program
    {
        static void Main(string[] args)
        {
            wt wt1 = delegate (string name)
              {
                  Console.WriteLine("{0},我是匿名方法。", name);
              };
            wt1("张三");
        }
    }
}

2.事件

namespace C练习
{
    public  delegate void wt(int x);
    public static void Add(int x)
    {
            Console.WriteLine(x+x);
    }
    public static event wt sj;
    static void Main(string[] args)
    {
            sj += Add;
            sj(8);
    }  
}

HealerHong
10 声望2 粉丝

较擅长面向对象语言