委托是一种类,它定义了方法的类型,使得方法可以当作另外一个方法的参数来传递。
这种将方法动态的赋值给参数的做法。可以避免大量使用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); } } }
委托真的蛮好用的 。
用了委托后的代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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); } } }
第一次用委托时,必须用=来赋值方法。
第二次的话我们可以用“+=”来绑定。
取消绑定可以用“-=”来取消绑定。