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();
    }
}
View Code

 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();
///委托的多播

}
}

posted @ 2019-04-28 15:34  胶己人~  阅读(146)  评论(0编辑  收藏  举报