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);
}
}
分享到:
相关推荐
Delegate在C#中扮演着至关重要的角色,它是类型安全的函数指针,允许我们引用方法并像传递普通变量一样传递它们。在这个"C# Delegate小例子"中,我们将深入探讨Delegate的概念、使用方式以及它在实际编程中的应用。 ...
委托(Delegate)则是C#中的一种类型,用于封装方法的引用,它可以看作是一种安全的多播函数指针。本篇将深入探讨如何在C#中使用委托和线程来实现异步编程。 首先,理解线程是非常重要的。在单线程应用程序中,所有...
C# Delegate讲解 C# Delegate是.NET Framework中的一种重要机制,它允许开发者在程序中动态地调用方法。Delegate相当于函数指针,它指向程序中另一个以后会被调用的一个或多个方法。委托包含三个重要的信息:所调用...
在C#编程中,委托(Delegate)是一种类型安全的函数指针,允许我们将方法作为参数传递给其他方法,或者存储在变量中以便稍后调用。这种机制在处理事件处理和跨对象通信时非常有用,特别是在需要在多个Form之间传递...
委托(delegate)是 C# 语言中的一种类型,它可以将方法作为参数传递给其他方法,或者将方法作为返回值返回给调用者。委托(delegate)通常用于实现回调机制,例如在异步操作完成时调用回调方法。 在多线程编程中,...
在C#编程语言中,事件和委托是两个关键概念,它们是实现对象间通信和响应机制的核心工具。本文将深入探讨这两个概念,并提供详细的解释。 首先,我们要理解什么是委托(Delegate)。委托在C#中是一种类型,它代表了...
Delegate是事件处理、回调函数和多播委托的基础,是C#中的一个重要特性。在本示例中,“Delegate实现传值”主要探讨的是如何利用Delegate在两个界面上进行数据传递,尤其是从第二个界面向第一个界面传递数据。 在...
网上有很多关于C++ delegate机制的文章,但都讲的是函数指针的内容,上周就C++中实现C#的delegate机制的问题研究了好几天,查看了很多相关资料,才解决了问题,现将我写的C++ delegate测试程序贴出来,希望能帮到有...
public delegate void CallBackMethod(string message); ``` 2. 在源窗体(Form1)中,创建一个方法,这个方法将作为回调: ```csharp private void ShowMessage(string message) { MessageBox.Show(message, ...
### C#中的Delegate委托与Event事件深度解析 #### 引言 在.NET Framework中,委托(Delegate)和事件(Event)是非常重要的概念。对于初学者而言,这些概念可能较为抽象和难以理解。本文旨在通过一系列逐步深入的...
C#中的委托(Delegate) 在C#中,委托(Delegate)是一种特殊的类型,用于封装方法的引用。它可以将方法作为参数传递,类似于C++中的函数指针,但是委托是类型安全和可靠的。 在上面的代码中,我们定义了一个委托...
在C#中,委托是一种类型安全的事件处理机制,它可以被看作是指向方法的指针。在异步编程中,委托允许我们使用BeginInvoke和EndInvoke方法启动异步调用。下面我们将深入探讨这两个方法以及如何使用委托实现异步操作。...
在C#编程语言中,委托(Delegate)是一种强大的特性,它允许我们把方法作为参数传递,或者存储在变量中稍后调用。这种设计模式在处理事件处理、回调函数、异步操作等场景时尤为常见。本文将深入探讨C#中的委托以及其...
从序言中,大家应该对委托和事件的重要性有点了解了吧,虽然说我们现在还是能模糊,但是从我的大白话系列中,我会把这些概念说的通俗易懂的。首先,我们还是先说说委托吧,从字面上理解,只要是中国人应该都知道这个...
在C#编程语言中,`delegate`和`事件(event)`是两个核心概念,用于实现基于对象的回调和发布/订阅模式。本文将通过一个简单的实例深入解析这两个概念,帮助初学者更好地理解和运用。 首先,`delegate`是C#中的一个...
最近收集的VB.Net-C#多线程Thread-代理委托delegate编程。文章列表: c#.net多线程同步.txt C#WebBrowser页面与WinForm交互技巧一.txt C#多线程编程-多细全.txt C#多线程编程简单实例.txt C#多线程窗体控件安全访问....
在C#编程语言中,委托(Delegate)是一个强大的特性,它允许我们将方法作为参数传递给其他方法,或者存储和调用方法的集合。这个特性在事件处理、回调函数以及实现函数式编程风格时非常有用。在本文中,我们将深入...
C# 中委托和事件的例子DelegateAndEventDemo 京华志&精华志出品 希望大家互相学习,互相进步 支持CSDN 支持微软 主要包括C# ASP.NET SQLDBA 源码 毕业设计 开题报告 答辩PPT等