delegate

C#基础-Func,Action

一曲冷凌霜 提交于 2020-03-22 19:57:06
Func,Action 的介绍及其用法 Func是一种委托,这是在3.5里面新增的,2.0里面我们使用委托是用Delegate,Func位于System.Core命名空间下,使用委托可以提升效率,例如在反射中使用就可以弥补反射所损失的性能。 Action<T>和Func<T,TResult>的功能是一样的,只是Action<T>没有返类型, Func<T,T,Result>:有参数,有返回类型 Action,则既没有返回也没有参数, Func<T,TResult> 的表现形式分为以下几种: 1。Func<T,TResult> 2。Func<T,T1,TResult> 3。Func<T,T1,T2,TResult> 4。Func<T,T1,T2,T3,TResult> 5。Func<T,T1,T2,T3,T4,TResult> 分别说一下各个参数的意义,TResult表示 委托所返回值 所代表的类型, T,T1,T2,T3,T4表示委托所调用的方法的参数类型, 以下是使用示例: Func<int, bool> myFunc = null;//全部变量 myFunc = x => CheckIsInt32(x); //给委托封装方法的地方 使用了Lambda表达式 private bool CheckIsInt32(int pars)//被封装的方法 {   return pars =

C#的委托(delegate、Action、Func、predicate)

人盡茶涼 提交于 2020-03-22 15:11:04
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递。事件是一种特殊的委托。 1.委托的声明 delegate我们常用到的一种声明 delegate至少0个参数,至多32个参数,可以无返回值,也可以指定返回值类型。 namespace ConsoleApplication1 { class Program { delegate void NumDelegate(int num); static void Main(string[] args) { AClass _a = new AClass(); _a.cwdelegate = _a.AddNum; _a.cwdelegate(20); NumDelegate num20delegate = new NumDelegate(Add20); Console.WriteLine("-------------------------------------------"); NumDelegate adddelegate = new NumDelegate(_a.AddNum); NumDelegate subdelegate = new NumDelegate(_a.SubNum); NumDelegate num30delegate = adddelegate + subdelegate;

C#基础-第11章:事件

梦想的初衷 提交于 2020-03-21 17:02:13
* 11.1 本章内容: · 设计公开事件的类型 · 编译器如何实现事件 · 设计侦听事件的类型 · 显式实现事件 /* ============================================================================== ============================================================================== */ //#define CompilerImplementedEventMethods using System; using System.Threading; public static class Events { public static void Main() { MailManager.Go(); TypeWithLotsOfEventsTest(); } private static void TypeWithLotsOfEventsTest() { // 测试事件代码 TypeWithLotsOfEvents twle = new TypeWithLotsOfEvents(); // 添加一个回调 twle.Foo += HandleFooEvent; twle.SimulateFoo(); Console.WriteLine(

C#基础-Func,Action

空扰寡人 提交于 2020-03-20 03:06:09
Func,Action 的介绍及其用法 Func是一种委托,这是在3.5里面新增的,2.0里面我们使用委托是用Delegate,Func位于System.Core命名空间下,使用委托可以提升效率,例如在反射中使用就可以弥补反射所损失的性能。 Action<T>和Func<T,TResult>的功能是一样的,只是Action<T>没有返类型, Func<T,T,Result>:有参数,有返回类型 Action,则既没有返回也没有参数, Func<T,TResult> 的表现形式分为以下几种: 1。Func<T,TResult> 2。Func<T,T1,TResult> 3。Func<T,T1,T2,TResult> 4。Func<T,T1,T2,T3,TResult> 5。Func<T,T1,T2,T3,T4,TResult> 分别说一下各个参数的意义,TResult表示 委托所返回值 所代表的类型, T,T1,T2,T3,T4表示委托所调用的方法的参数类型, 以下是使用示例: Func<int, bool> myFunc = null;//全部变量 myFunc = x => CheckIsInt32(x); //给委托封装方法的地方 使用了Lambda表达式 private bool CheckIsInt32(int pars)//被封装的方法 {   return pars =

C#基础-Func,Action

一个人想着一个人 提交于 2020-03-15 19:10:18
Func,Action 的介绍及其用法 Func是一种委托,这是在3.5里面新增的,2.0里面我们使用委托是用Delegate,Func位于System.Core命名空间下,使用委托可以提升效率,例如在反射中使用就可以弥补反射所损失的性能。 Action<T>和Func<T,TResult>的功能是一样的,只是Action<T>没有返类型, Func<T,T,Result>:有参数,有返回类型 Action,则既没有返回也没有参数, Func<T,TResult> 的表现形式分为以下几种: 1。Func<T,TResult> 2。Func<T,T1,TResult> 3。Func<T,T1,T2,TResult> 4。Func<T,T1,T2,T3,TResult> 5。Func<T,T1,T2,T3,T4,TResult> 分别说一下各个参数的意义,TResult表示 委托所返回值 所代表的类型, T,T1,T2,T3,T4表示委托所调用的方法的参数类型, 以下是使用示例: Func<int, bool> myFunc = null;//全部变量 myFunc = x => CheckIsInt32(x); //给委托封装方法的地方 使用了Lambda表达式 private bool CheckIsInt32(int pars)//被封装的方法 {   return pars =

二、Groovy语法(二):闭包

久未见 提交于 2020-03-12 08:56:50
1、Groovy中闭包基础 1.1 闭包的概念 闭包是被包装成 对象 的代码块,可以通过一个变量引用到它,页可以传递给别人进行处理(像处理一个对象一样处理闭包,比如作为参数传递、作为一个方法的返回值等) 1.2 闭包的定义和调用 //定义一个闭包(闭包是一些代码组成的代码块对象,用{}括起来的一段代码) def closure = { println 'Hello groovy!'} //调用(类似定义了一个方法,然后可以去调用这个方法,可与方法对比着来理解闭包) closure.call() //Hello groovy! closure() //Hello groovy! 1.3闭包参数(普通参数和隐式参数) //定义一个有参数的闭包 利用->区分参数和具体执行代码 def closure = { String name -> println "Hello $name!"} //调用 closure('groovy') //Hello groovy! //多个参数由逗号隔开 def closure2 = { String name,int age -> println "Hello $name! My age is $age"} //调用 closure2('groovy',6) //Hello groovy! My age is 6 //当没有声明参数时

ios 消息跳转处理

折月煮酒 提交于 2020-03-08 19:23:17
一.消息转发流程 当向Objective-C对象发送一个消息,但runtime在当前类及父类中找不到此selector对应的方法时,消息转发(message forwarding)流程开始启动。 动态方法解析(Dynamic Method Resolution或Lazy method resolution) 向当前类(Class)发送 resolveInstanceMethod: (对于类方法则为 resolveClassMethod: )消息,如果返回YES,则系统认为请求的方法已经加入到了,则会重新发送消息。 快速转发路径(Fast forwarding path) 若果当前target实现了 forwardingTargetForSelector: 方法,则调用此方法。如果此方法返回除nil和self的其他对象,则向返回对象重新发送消息。 慢速转发路径(Normal forwarding path) 首先runtime发送 methodSignatureForSelector: 消息查看Selector对应的方法签名,即参数与返回值的类型信息。如果有方法签名返回,runtime则根据方法签名创建描述该消息的 NSInvocation ,向当前对象发送 forwardInvocation: 消息,以创建的NSInvocation对象作为参数

Code-C#-Delegate:委托(delegate)的三种调用方式:同步调用,异步调用,异步回调

。_饼干妹妹 提交于 2020-03-08 13:34:54
ylbtech-Code-C#-Delegate:委托(delegate)的三种调用方式:同步调用,异步调用,异步回调 1. 返回顶部 1、 下面为即将被调用的方法: public delegate int AddHandler(int a, int b); public class 加法类 { public static int Add(int a, int b) { Console.WriteLine("开始计算:" + a + "+" + b); Thread.Sleep(1000); Console.WriteLine("计算完成!"); return a + b; } } 同步调用 : class Program { static void Main() { Console.WriteLine("===== 同步调用 SyncInvokeTest ====="); AddHandler handler = new AddHandler(加法类.Add); int result = handler.Invoke(1, 2); Console.WriteLine("继续做别的事情。。。"); Console.WriteLine(result); Console.ReadKey(); } } invoke后阻塞主进程,直到handler执行完毕; ===== 同步调用

使用异步委托执行线程(delegate)

[亡魂溺海] 提交于 2020-03-08 12:51:08
由于异步委托产生的线程与应用程序主线程是分开执行的,若主线程要获取异步委托线程的结果,则主线程需要等待异步委托的执行结果。 BeginInvoke是Delegate类型的一个方法,它的返回类型为IAsyncResult,通过该接口,可以获得异步委托的执行信息。 1、投票技术:等待异步委托结果的一种方法是投票技术,该技术的实现原理是通过IAsyncResult接口的IsComplete属性来检查委托是否完成了任务。EndInvote方法获取执行结果。举个例子,如下: 执行后的效果: 2、访问等待句柄技术:是等待异步委托结果的第二种方法,其实也就是使用IAsyncResultAsync接口的AsyncWaitHandle属性来访问等待句柄的,通过该属性获得一个WaitHandle对象,WaitHandle对象有个方法WaitOne()。 代码如下: 执行效果: 来源: https://www.cnblogs.com/jason-davis/p/4019948.html

性能报告——反射创建对象

最后都变了- 提交于 2020-03-08 08:27:26
代码 public void testperformance() { string assembly = " Pixysoft.Framework.Noebe.Orm " ; string type = " Pixysoft.Framework.Noebe.Orm.testdriven.Pojo " ; CodeTimer.Initialize(); CodeTimer.Time( " reflection " , 100000 , delegate { Type _type = Assembly.Load(assembly).GetType(type); Object obj = Activator.CreateInstance(_type); }); CodeTimer.Time( " direct " , 100000 , delegate { Object obj = new Pojo(); }); CodeTimer.Time( " dynamic " , 100000 , delegate { Type _type = Assembly.Load(assembly).GetType(type); Object obj = ReflectionManager.CreateDynamicType(_type).GetDefaultConstructor().Invoke()