什么叫委托
委托是一种类,它定义了方法的类型,使得方法可以当作另外一个方法的参数来传递。
这种将方法动态的赋值给参数的做法。可以避免大量使用if else的做法。同时使得程序有很好的扩展性。
例:
没用委托以前的通常代码:
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
namespace ConsoleApplication1
{
public class Program
{
static void Main(string[] args)
{
getname("pslin",gettyper.en);
getname("小林", gettyper.ch);
}
public enum gettyper
{
en=1,
ch=0
}
public static void getname(string name,gettyper typer)
{
switch (typer)
{
case gettyper.ch:
ch(name);
break;
case gettyper.en:
en(name);
break;
}
}
public static void en(string name)
{
Console.WriteLine("morning:" + name);
}
public static void ch(string name)
{
Console.WriteLine("早上好," + name);
}
}
}
委托真的蛮好用的 。
用了委托后的代码:
代码
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
namespace ConsoleApplication1
{
public class Program
{
public delegate void gettypername(string name);
static void Main(string[] args)
{
getname("pslin",en);
Console.ReadLine();
}
public static void getname(string name, gettypername typer)
{
typer(name);
}
public static void en(string name)
{
Console.WriteLine("morning:" + name);
}
public static void ch(string name)
{
Console.WriteLine("早上好," + name);
}
}
}
我们再精简下:
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
namespace ConsoleApplication1
{
public class Program
{
public delegate void gettypername(string name);
static void Main(string[] args)
{
gettypername delegate1;
delegate1 = en;
delegate1("pslin");
delegate1 = ch;
delegate1("小林");
Console.ReadLine();
}
public static void en(string name)
{
Console.WriteLine("morning:" + name);
}
public static void ch(string name)
{
Console.WriteLine("早上好," + name);
}
}
}
第一次用委托时,必须用=来赋值方法。
第二次的话我们可以用“+=”来绑定。
取消绑定可以用“-=”来取消绑定。


浙公网安备 33010602011771号