<C#高级编程>第6章笔记
经常听说委托这一名词。。却一直不知道究竟是个什么东西。。
原来是函数指针。。。。。。。而事件个人感觉就是个用来存放当前委托方法的容器。。
第6章 委托和事件
委托
类似于C++中的函数指针,但是.NET委托是类型安全的。
语法如下:
[public/protected/private] delegate 返回类型 委托名(参数类型 参数名, ...)
委托基本上是定义一个新类(实现一个派生于System.MulticastDelegate的类),所以可以在所有定义类的地方定义委托。
using System;
using System.Collections.Generic;
using System.Text;
namespace Test
{
class Program
{
private delegate string GetAString();
static void Main(string[] args)
{
int x = 40;
GetAString firstStringMethod = new GetAString(x.ToString);
Console.WriteLine(firstStringMethod());
Console.Read();
}
}
}
在C#中,委托在语法上总是带有一个参数的构造函数,这个参数就是委托引用的方法,必须匹配最初定义委托时的签名。
给定委托的实例可以表示任何类型的任何对象上的实例方法或静态方法——只要方法的特征匹配于委托的特征。
多播委托
上文中的委托只包含一个方法调用,调用委托的次数与调用方法的次数相同。
如果要调用多个方法,就需要多次显式调用这个委托。
实际上委托可以包含多个方法,这种委托称为多播委托。
多播委托的返回值必须为void类型。
通过+和+=运算符来增加方法调用,相对地,减少方法调用则使用-和-=运算符。注意它的顺序并非固定的。
事件
语法:
public static event 委托类型 事件名;
感觉像一个存储了当前委托方法的属性,在这个事件被调用时就等同于调用这些委托的方法。
调用事件时一般定义一个以on+事件名命名的方法,检查事件是否为null(即没有任何委托)。