`

C# Delegate implement

    博客分类:
  • C#
c# 
阅读更多
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);


        }
    }


分享到:
评论

相关推荐

    C# Delegate小例子

    Delegate在C#中扮演着至关重要的角色,它是类型安全的函数指针,允许我们引用方法并像传递普通变量一样传递它们。在这个"C# Delegate小例子"中,我们将深入探讨Delegate的概念、使用方式以及它在实际编程中的应用。 ...

    C# delegate thread范例

    委托(Delegate)则是C#中的一种类型,用于封装方法的引用,它可以看作是一种安全的多播函数指针。本篇将深入探讨如何在C#中使用委托和线程来实现异步编程。 首先,理解线程是非常重要的。在单线程应用程序中,所有...

    C# Delegate讲解

    C# Delegate讲解 C# Delegate是.NET Framework中的一种重要机制,它允许开发者在程序中动态地调用方法。Delegate相当于函数指针,它指向程序中另一个以后会被调用的一个或多个方法。委托包含三个重要的信息:所调用...

    C#使用委托(delegate)实现在两个form之间传递数据的方法

    在C#编程中,委托(Delegate)是一种类型安全的函数指针,允许我们将方法作为参数传递给其他方法,或者存储在变量中以便稍后调用。这种机制在处理事件处理和跨对象通信时非常有用,特别是在需要在多个Form之间传递...

    c#多线程利用委托更新控件内容

    委托(delegate)是 C# 语言中的一种类型,它可以将方法作为参数传递给其他方法,或者将方法作为返回值返回给调用者。委托(delegate)通常用于实现回调机制,例如在异步操作完成时调用回调方法。 在多线程编程中,...

    C#中的事件和委托(Delegate,Event)

    在C#编程语言中,事件和委托是两个关键概念,它们是实现对象间通信和响应机制的核心工具。本文将深入探讨这两个概念,并提供详细的解释。 首先,我们要理解什么是委托(Delegate)。委托在C#中是一种类型,它代表了...

    Delegate实现传值

    Delegate是事件处理、回调函数和多播委托的基础,是C#中的一个重要特性。在本示例中,“Delegate实现传值”主要探讨的是如何利用Delegate在两个界面上进行数据传递,尤其是从第二个界面向第一个界面传递数据。 在...

    C++中实现委托(delegate)

    网上有很多关于C++ delegate机制的文章,但都讲的是函数指针的内容,上周就C++中实现C#的delegate机制的问题研究了好几天,查看了很多相关资料,才解决了问题,现将我写的C++ delegate测试程序贴出来,希望能帮到有...

    C#跨窗体(Winform)调用控件(委托回调)

    public delegate void CallBackMethod(string message); ``` 2. 在源窗体(Form1)中,创建一个方法,这个方法将作为回调: ```csharp private void ShowMessage(string message) { MessageBox.Show(message, ...

    C#由浅至深深度解析Delegate委托与Event事件

    ### C#中的Delegate委托与Event事件深度解析 #### 引言 在.NET Framework中,委托(Delegate)和事件(Event)是非常重要的概念。对于初学者而言,这些概念可能较为抽象和难以理解。本文旨在通过一系列逐步深入的...

    c#的回调函数(delegate关键字)

    C#中的委托(Delegate) 在C#中,委托(Delegate)是一种特殊的类型,用于封装方法的引用。它可以将方法作为参数传递,类似于C++中的函数指针,但是委托是类型安全和可靠的。 在上面的代码中,我们定义了一个委托...

    .Net的异步机制(委托Delegate)

    在C#中,委托是一种类型安全的事件处理机制,它可以被看作是指向方法的指针。在异步编程中,委托允许我们使用BeginInvoke和EndInvoke方法启动异步调用。下面我们将深入探讨这两个方法以及如何使用委托实现异步操作。...

    C#委托代码样例DelegateDemo

    在C#编程语言中,委托(Delegate)是一种强大的特性,它允许我们把方法作为参数传递,或者存储在变量中稍后调用。这种设计模式在处理事件处理、回调函数、异步操作等场景时尤为常见。本文将深入探讨C#中的委托以及其...

    delegate委托

    从序言中,大家应该对委托和事件的重要性有点了解了吧,虽然说我们现在还是能模糊,但是从我的大白话系列中,我会把这些概念说的通俗易懂的。首先,我们还是先说说委托吧,从字面上理解,只要是中国人应该都知道这个...

    delegate与事件的实例(c#)

    在C#编程语言中,`delegate`和`事件(event)`是两个核心概念,用于实现基于对象的回调和发布/订阅模式。本文将通过一个简单的实例深入解析这两个概念,帮助初学者更好地理解和运用。 首先,`delegate`是C#中的一个...

    VB.Net-C#多线程Thread-代理委托delegate编程

    最近收集的VB.Net-C#多线程Thread-代理委托delegate编程。文章列表: c#.net多线程同步.txt C#WebBrowser页面与WinForm交互技巧一.txt C#多线程编程-多细全.txt C#多线程编程简单实例.txt C#多线程窗体控件安全访问....

    c#中关于委托delegate的经典的实例

    在C#编程语言中,委托(Delegate)是一个强大的特性,它允许我们将方法作为参数传递给其他方法,或者存储和调用方法的集合。这个特性在事件处理、回调函数以及实现函数式编程风格时非常有用。在本文中,我们将深入...

    C# 中委托和事件的例子DelegateAndEventDemo

    C# 中委托和事件的例子DelegateAndEventDemo 京华志&精华志出品 希望大家互相学习,互相进步 支持CSDN 支持微软 主要包括C# ASP.NET SQLDBA 源码 毕业设计 开题报告 答辩PPT等

Global site tag (gtag.js) - Google Analytics