您的位置:首页 > 编程语言 > C#

c#中的delegate

2015-09-08 13:31 232 查看
你完全可以把delegate理解成C中的函数指针,它允许你传递一个类A的方法m给另一个类B的对象,使得类B的对象能够调用这个方法m,说白了就是可以把方法当作参数传递。不过delegate和函数指针还是有点区别的,delegate有许多函数指针不具备的优点。首先,函数指针只能指向静态函数,而delegate既可以引用静态函数,又可以引用非静态成员函数。在引
用非静态成员函数时,delegate不但保存了对此函数入口指针的引用,而且还保存了调用此函数的类实例的引用。其次,与函数指针相 比,delegate是面向对象、类型安全、可靠的受控(managed)对象。也就是说,runtime能够保证delegate指向一个有效的方法, 你无须担心delegate会指向无效地址或者越界地址。

public class DelegateTest

{

// 声明delegate对象

public delegate void CompareDelegate(int a,int b);

// 欲传递的方法,它与CompareDelegate具有相同的参数和返回值类型

public static void Compare(int a,int b)

{

Console.WriteLine((a>b).ToString());

}

public static void Main()

{

// 创建delegate对象

CompareDelegate cd = new CompareDelegate(DelegateTest.Compare);

// 调用delegate

cd(1,2);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: