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);
}
}
用非静态成员函数时,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);
}
}
相关文章推荐
- C#------在线支付案例
- C#求平均分和高于平均分的同学姓名。
- C#中随机生成指定长度的密码
- c#获取页面重定向url
- C# 委托
- C#高级------移动存储设备案例
- C#学习之接口和抽象类
- 【C#基本功 控件的用法】 Toolbar的用法
- C#如何设置session过期时间
- C#高级------动物继承类
- c# 线性表
- C#完美读取CSV
- C#实现远程开机(局域网测试通过)
- C#实现远程开机(局域网测试通过)
- C#高级----打招呼案例
- C#的async和await
- C#接口类型数组
- C#关键字ref和out
- C#进阶系列——AOP?AOP!
- C# Enum,Int,String的互相转换 枚举转换