C#委托delegate
// 小张类 public class MrZhang { // 其实买车票的悲情人物是小张 public static void BuyTicket() { Console.WriteLine("NND,每次都让我去买票,鸡人呀!"); } public static void BuyMovieTicket() { Console.WriteLine("我去,自己泡妞,还要让我带电影票!"); } } //小明类 class MrMing { // 声明一个委托,其实就是个“命令” public delegate void BugTicketEventHandler(); public static void Main(string[] args) { // 这里就是具体阐述这个命令是干什么的,本例是MrZhang.BuyTicket“小张买车票” BugTicketEventHandler myDelegate = new BugTicketEventHandler(MrZhang.BuyTicket); myDelegate += MrZhang.BuyMovieTicket; // 这时候委托被附上了具体的方法 myDelegate(); Console.ReadKey(); } }
C#与C++最大的区别就是C#没有指针,而取而代之的是委。C#中类型包括引用类型和值类型,值类型包括枚举和结构体,引用类型包括:用户定义的类、接口、委托、object等,
引用类型在运行时被改变。委托常用于实现事件和回调方法。所有的委托(delegate)都派生与system.Delegate类
委托声明:
public delegate int mydelegate(int n);
delegate int mydelegate(int m);
class Program
{
static int num = 15;//固定值
public static int Add(int p)
{
return num+=p;
}
public int Mult(int q)
{
return num *= q;
}
//如果设置成静态的,则可以直接调用,不用实例化,因为静态字段本身也是类
public int GetNum()
{
return num;
}
static void Main(string[] args)
{
Program pr = new Program();
mydelegate my1 = new mydelegate(Add);///静态字段
mydelegate my2 = new mydelegate(pr.Mult);///非静态字段
my1(15);
Console.WriteLine("{0}", pr.GetNum());
my2(2);
Console.WriteLine("{0}", pr.GetNum());
Console.ReadLine();
///委托的多播
}
}