------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------
委托也叫代理,相当于把事情交代给别人去办,如委托别人帮你办理什么东西。
C#中如果一个方法委托给一个对象,这个对象就全权代理这个方法的执行。、
建立一个委托:定义一个委托和定义个方法类似。
<访问修饰符> delegate 返回类型 委托名();
定义好一个委托后,委托是没有具体的实现对象,要用委托还必须实例化委托。
委托名 实例委托名 = new 委托名(类名.方法名);
示例:
//定义方法SortArray用于按照顺序排序
public static void SortArray(int[] array) {
int a;
bool bl = false;
for (int i = 0; i < array.Length; i++, bl = false)
{
for (int j = 0; j < array.Length - 1; j++)
{
if (array[j] > array[j + 1])
{
a = array[j];
array[j] = array[j + 1];
array[j + 1] = a;
bl = true;
}
}
if (bl == false) {
break;
}
}
}
public delegate void SortDelegate(int[] array);//创建一个委托
static void Main(string[] args)
{
Console.WriteLine("排序前的数组");
int[] arrayints = { 1, 3, 8, 4, 2 };
foreach (int i in arrayints)
{
Console.Write(i.ToString() + "、");
}
SortDelegate myDelegate = new SortDelegate(SortArray);//实例化委托
myDelegate(arrayints);//传递参数,调用委托
Console.WriteLine("\n排序后的数组");
foreach (int i in arrayints)
{
Console.Write(i.ToString() + "、");
}
Console.ReadLine();
}
多点委托:前面提到的委托都只包含对一个方法的调用,如果需要调用多个方法,需要多次显示的调用这个委托,我们还有另的选择,我们可以让一个委托中包含多个方法,这样我们一次显示调用委托,就可以按照顺序连续的调用多个方法。看下面的例子:
public static void SortArray(int[] array) {
int a;
bool bl = false;
for (int i = 0; i < array.Length; i++, bl = false)
{
for (int j = 0; j < array.Length - 1; j++)
{
if (array[j] > array[j + 1])
{
a = array[j];
array[j] = array[j + 1];
array[j + 1] = a;
bl = true;
}
}
if (bl == false) {
break;
}
}
}
public static void SayDelegate(int[] array) {
Console.WriteLine("\n排序后的数组");
foreach (int i in array)
{
Console.Write(i.ToString() + "、");
}
}
public delegate void SortDelegate(int[] array);//创建一个委托
static void Main(string[] args)
{
Console.WriteLine("排序前的数组");
int[] arrayints = { 1, 3, 8, 4, 2 };
foreach (int i in arrayints)
{
Console.Write(i.ToString() + "、");
}
SortDelegate myDelegate = new SortDelegate(SortArray);//实例化委托
myDelegate += new SortDelegate(SayDelegate);
myDelegate(arrayints);//传递参数,调用委托
Console.ReadLine();
}
输出的结果与第一个是一样的。
可以看到我们一次显示的调用一个委托,它顺序的(按照你添加方法的顺序)执行了方法SortArray和SayDelegate。这里要注意的有几点:
- 委托支持 +=,-=这样的运算符,对应为添加或去掉一个方法
- 多点委托不可以定义有返回值,因为无法处理多个方法的返回值,所以如果要使用多点委托,应该用void,否则你的编译会返回一个错误
- 多点委托不建议你的参数列表中有OUT的类型,这样只会out最后一个方法的值,其他的值会丢失。
- 多点委托处理多个方法时,这些方法是否有传递参数,参数的类型和数量都要一致,否则会报错。
------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------