C# Delegate implement

By | 12月15日
Advertisement

delegate声明

1. delegate
public delegate int MethodName(intx, int y);
最多32个参数

2. Action
Action是返回值的泛型委托
2.1 Action 表示无参,无返回值的委托
2.2 Action<int,string> 表示传入参数int,string 无返回值委托
最多16个参数

3. Func
Func是有返回值的泛型委托
3.1 Func<int> 表示无参返回值为int的委托
3.2 Func<object,string,int> 表示传入参数为object,string 返回值为int的委托
最多16个参数,必须要有返回值

4. predicate
predicate是返回bool型的泛型委托
4.1 predicate<int> 表示传入参数为int 返回值为bool的委托
只能必须也只能有一个传入参数,返回值固定为bool

实例化delegate

例:

delegate void Callback(String message);
    class DelegateTest
    {
        //
        public void printMsg(String msg, Callback callback, AsyncCallback asynCallback, String asynParams)
        {
            Console.WriteLine(msg);
           // callback(msg); //同步执行
            IAsyncResult ar= callback.BeginInvoke(msg, asynCallback, asynParams);//异步执行,会新建一个线程操作

            //WaitHandle waitHandle= ar.AsyncWaitHandle;
            //waitHandle.WaitOne();  //同步等待返回, 但只等待callback委托,并不包括asynCallback

            Console.WriteLine("it's finished");
            Console.ReadKey();

        }
        public static void Main(String[] args)
        {
            DelegateTest t = new DelegateTest();
            String externalParams = "external params";
            System.Threading.Thread.CurrentThread.Name = "main thread";
            System.Threading.Thread.CurrentThread.Priority = ThreadPriority.Lowest;
            Callback c = (msg) => {
                //System.Threading.Thread.Sleep(3000);

                //异步执行测试代码 --begin
                System.Threading.Thread.CurrentThread.Name = "sub thread";
                System.Threading.Thread.CurrentThread.Priority = ThreadPriority.Highest;
                //异步执行测试代码 --end

                Console.WriteLine("callback msg:" + msg + ":" + externalParams);

            };

            AsyncCallback ac = (ar) => {//
                Console.WriteLine("incoming param-" + ar.AsyncState.ToString() + ": threadname-" + System.Threading.Thread.CurrentThread.Name);
                //System.Threading.Thread.Sleep(5000);

            };
            t.printMsg("test msg", c, ac, "asyn test message");

            Console.WriteLine("main thread end threadname-" + System.Threading.Thread.CurrentThread.Name);

        }
    }

Similar Posts:

  • 在Objective-C中实现Delegate:协议

    在Objective-C中实现Delegate:协议 协议的作用: 实现两个类之间的通讯. 协议的特性和注意事项: 协议声明了可以被任何类实现的方法: 协议声明的方法前加:@optional表示可选,加@required表示必须实现: 协议不是类,而是一种两个类之间的接口: 定义了协议的类可以看做是将协议定义的方法代理给了实现它们的类: 协议的定义: 一个在标准的Foundation头文件NSObject.h中定义NSCopying协议的例子: NSObject.h @protocol NSCo

  • object—c 代理 协议 委托 数据源 概念

    2011-08-05 10:01 (网摘) OBJC 中的 protocol 相当于 java 里的接口,delagate 就是接口的实现类(C中的回调类似): 数据源就是对象遵循了存储数据的协议,可以存储使用数据 协议表示了方法可以被任何类所实现.协议本身不是类.他们只是简单定义了一个其他对象可以实现的接口.当你的类实现了协议中的某个方法的时候也就是说你的类实现了那个协议. Objective-C的另一个扩展称为协议,它非常象Java中的接口.两者都是通过一个简单的方法声明列表发布一个接口,任

  • Creating a document centric iPhone/iPad application with own file format using ZipArchive

    If I need to predict one thing about where the App Store is heading to, now that the iPad has been released, I would say "It's going to be less about farting apps and much more about productivity apps" Yes – the iPad has already changed the game

  • SDWebImageManager在CCLayer中的使用方法

    SDWebImageManager在CCLayer中的使用方法 1. 在头文件中 #import"SDWebImageManager.h" CCLayer要在类定义里面实现 SDWebImageManagerDelegate这个协议. 定义 并且创建 UIImageView * m_headImage; 2. 启动下载头像 - (void) upDateUserAvatar:(std::string) strAvatar { if (strAvatar.length()<=0)

  • OC之代理协议的新概念

    网摘) OBJC 中的 protocol 相当于 java 里的接口,delagate 就是接口的实现类(C中的回调类似 ): 数据源就是对象遵循了存储数据的协议,可以存储使用数据 协议表示了方法可以被任何类所实现.协议本身不是类.他们只是简单定义了一个其他对象可以实现的接口.当你的类实现了协议中的某个方法的时候也就是说你的类实现了那个协议. Objective-C的另一个扩展称为协议,它非常象Java中的接口.两者都是通过一个简单的方法声明列表发布一个接口,任何类都可以选择实现.协议中的方法通

  • 如何使用protocol

    1. 声明 @protocol CommuHistoryDelegate <NSObject> -(void)change; @end 2. 实现协议,说白了就是实现接口 @interface InterRuleControl : UIViewController<CommuHistoryDelegate> -(void)change { NSLog(@"********** delegate implement"); self.flashMode = Inte

  • 基于QStyledItemDelegate的例子 Star Delegate Example

    这节需要事件.绘图等基础知识,比较复杂...先收藏,后续学习. Star Delegate Example http://doc.qt.nokia.com/4.7-snapshot/itemviews-stardelegate.html itemviews/stardelegate/stardelegate.cpp itemviews/stardelegate/stardelegate.h itemviews/stardelegate/stareditor.cpp itemviews/stard

  • Implementing a delegate chain system in Objective-C

    http://www.xs-labs.com/en/archives/articles/cocoa-delegate-chain/ Implementing a delegate chain system in Objective-C Author: Jean-David Gadina Copyright: 2013 Jean-David Gadina - www.xs-labs.com - All Rights Reserved License: This article is publish

  • Implement Your Own Proxy-Based AOP Framework

    Aspect-oriented programming (AOP) is well-suited to managing application crosscutting concerns, such as logging, security, and transaction management. AOP provides a complement to object-oriented programming (OOP), which is still the most common and

  • NSURLConnection和UITableView的delegate执行先后问题的解决方法

    参考:http://stackoverflow.com/questions/12778213/uitableview-delegate-fires-nsurlconnection-delegate 一个ViewController同时包含NSURLConnection和UITableView的delegate时,无论怎样都会优先执行UITableView的delegate这就会导致dataSource出问题,那么解决方案就是: didRecieveData might be called mor

Tags: