首页 > 代码库 > delegate
delegate
【delegate】
delegate定义了一个函数引用类型,犹如C++中的typedef,也犹如Objc中的Block(在捕获变量上有点差异)。
1、有名方法,delegate捕获的方法可以是实例方法或静态方法。
1 // Declare a delegate 2 delegate void Del(); 3 4 class SampleClass 5 { 6 public void InstanceMethod() 7 { 8 System.Console.WriteLine("A message from the instance method."); 9 }10 11 static public void StaticMethod()12 {13 System.Console.WriteLine("A message from the static method.");14 }15 }16 17 class TestSampleClass18 {19 static void Main()20 {21 SampleClass sc = new SampleClass();22 23 // Map the delegate to the instance method:24 Del d = sc.InstanceMethod;25 d();26 27 // Map to the static method:28 d = SampleClass.StaticMethod;29 d();30 }31 }32 /* Output:33 A message from the instance method.34 A message from the static method.35 */
2、匿名方法。
也可以不创建delegate对象:
对于捕获,编译器会创建额外的类来容纳变量,而之前定义该变量的类的实例拥有该变量的引用,捕获到该变量的匿名方法同样也拥有该变量的引用。所以,方法内的变量并不是我们想象中存储在方法对应的栈帧中。我们知道,所有引用都是在拥有该引用的实例的堆上,除非委托被回收,否则该引用就不会被销毁。
参考:
1、http://msdn.microsoft.com/zh-cn/library/98dc08ac(v=vs.90).aspx
2、http://msdn.microsoft.com/zh-cn/library/0yw3tz5k(v=vs.90).aspx
3、http://www.cnblogs.com/wenjiang/archive/2013/03/12/2954913.html
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。