以前我都是通过定义一个delegate来写委托的,但是最近看一些外国人写的源码都是用action和func方式来写,当时感觉对这很陌生所以看起源码也觉得陌生,所以我就花费时间来学习下这两种方式,然后发现确实代码简洁了不少.这两种方式我们也可以去实践的过程去慢慢运用. 先说一下委托: 模拟一下场景:小明最近学习情绪高涨,以前买的书已经满足不了欲望,打算去买本(一个程序员的自我修养).可是呢以前总是跑书厂买,nm,太远了扛不住,就去跑去附近书店去买,小明去给钱就弄了一本书回来,这个过程就是委托.开始…
以前我都是通过定义一个delegate来写委托的,但是最近看一些外国人写的源码都是用action和func方式来写,当时感觉对这很陌生所以看起源码也觉得陌生,所以我就花费时间来学习下这两种方式,然后发现确实代码简洁了不少.这两种方式我们也可以去实践的过程去慢慢运用. 先说一下委托: 模拟一下场景:小明最近学习情绪高涨,以前买的书已经满足不了欲望,打算去买本(一个程序员的自我修养).可是呢以前总是跑书厂买,nm,太远了扛不住,就去跑去附近书店去买,小明去给钱就弄了一本书回来,这个过程就是委托.开始…
Action 无返回值 Func 有返回值,且最后一个参数为返回值 Action用法 public static void test(string s) { Console.WriteLine("name1:{0}", s); } static void Main(string[] args) { Action<string> action_ = new Action<string>(test); action_ -= test; action_ += dele…
委托的特点 委托类似于 C++ 函数指针,但它们是类型安全的. 委托允许将方法作为参数进行传递. 委托可用于定义回调方法. 委托可以链接在一起. delegate的用法 delegate void BookDelegate(string a,string b); public MainWindow() { InitializeComponent(); BookDelegate method = new BookDelegate(Book); method("Hello", "…
sprintf函数 sprintf函数原型为 int sprintf(char *str, const char *format, ...).作用是格式化字符串,具体功能如下所示: (1)将数字变量转换为字符串. (2)得到整型变量的16进制和8进制字符串. (3)连接多个字符串. 举例如下所示: ] = { }; ; //将data转换为字符串 sprintf(str,"%d",data); //获取data的十六进制 sprintf(str,"0x%X",dat…
datareader对象提供只读单向数据的快速传递,单向:您只能依次读取下一条数据;只读:DataReader中的数据是只读的,不能修改;相对地,DataSet中的数据可以任意读取和修改 01.using (SqlConnection connection = 02. new SqlConnection(connectionString)) 03.{ 04. SqlCommand command = 05. new SqlCommand(queryString, connection); 06.…
//vs2017 + framework4.6.2 //zip    https://github.com/chxl800/ActionFuncDemo //源文件git   https://github.com/chxl800/ActionFuncDemo.git using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace ActionFunc{ //Action与Fu…
 new Action(() => { }).Invoke();new Action(() => { })();    new Func<int, int>(s => { return s; }).Invoke(1);   new Func<int, List<int>>(s => { return new List<int>{1,2,3,4,5}; }).Invoke(1);…
其实他们两个都是委托[代理]的简写形式. 一.[action<>]指定那些只有输入参数,没有返回值的委托 Delegate的代码: [csharp]  public delegate void myDelegate(string str);  public static void HellowChinese(string strChinese)  {      Console.WriteLine("Good morning," + strChinese);      Con…
以前我都是通过定义一个delegate来写委托的,但是最近看一些外国人写的源码都是用action和func方式来写,当时感觉对这很陌生所以看起源码也觉得陌生,所以我就花费时间来学习下这两种方式,然后发现确实代码简洁了不少.这两种方式我们也可以去实践的过程去慢慢运用. 先说一下委托: 模拟一下场景:小明最近学习情绪高涨,以前买的书已经满足不了欲望,打算去买本(一个程序员的自我修养).可是呢以前总是跑书厂买,nm,太远了扛不住,就去跑去附近书店去买,小明去给钱就弄了一本书回来,这个过程就是委托.开始…
以前我都是通过定义一个delegate来写委托的,但是最近看一些外国人写的源码都是用action和func方式来写,当时感觉对这很陌生所以看起源码也觉得陌生,所以我就花费时间来学习下这两种方式,然后发现确实代码简洁了不少.这两种方式我们也可以去实践的过程去慢慢运用. 先说一下委托:模拟一下场景:小明最近学习情绪高涨,以前买的书已经满足不了欲望,打算去买本(一个程序员的自我修养).可是呢以前总是跑书厂买,nm,太远了扛不住,就去跑去附近书店去买,小明去给钱就弄了一本书回来,这个过程就是委托.开始分…
1.为什么要用委托 我们为什么要有委托?任何东西存在即合理,不合理的也会被时间淘汰掉,委托既然存在肯定有存在的必要,我们来看一下什么时候可以用到委托. 接下来我们有个需求,就是调用一个方法,取出1-1000个数字中所有是10的倍数的数字 public static List<int> GetNum() { List<int> lst = new List<int>(); //这个算法是最简陋的,但是举这个例子是最合适的 ; i < ; i++) { ==) { l…
以前我都是通过定义一个delegate来写委托的,但是最近看一些外国人写的源码都是用action和func方式来写,当时感觉对这很陌生所以看起源码也觉得陌生,所以我就花费时间来学习下这两种方式,然后发现确实代码简洁了不少.这两种方式我们也可以去实践的过程去慢慢运用. 先说一下委托: 模拟一下场景:小明最近学习情绪高涨,以前买的书已经满足不了欲望,打算去买本(一个程序员的自我修养).可是呢以前总是跑书厂买,nm,太远了扛不住,就去跑去附近书店去买,小明去给钱就弄了一本书回来,这个过程就是委托.开始…
前言 最近在阅读某开源框架源码的时候,发现作者在其中运用了很多Action委托和Func委托,虽然我之前在项目中也有一些对委托的实操,但还是免不了长时间的不用,当初消化的一些委托基础都遗忘了...索性,趁热打铁,借助这次分享的机会,也帮自己重新巩固下.Net中关于委托的一些基础用法. 直奔主题 从.Net Framework1.0开始就为我们提供了委托的功能使用.那个时候.Net内置委托Action和Func还没有问世,那么,我们先来看看1.0版本时候的委托.委托从字面上来理解就是"帮别人干活&…
一.基础定义 老王想找老张的老婆出去耍,但是一看,老张还在厨房煮饭.于是老王就对老张隔壁的淑芬说:"等下老张吃完饭出去喝茶,你就把前门晒的苞谷收了,老张从左门出,你就收右边的苞谷,我就知道从鸡舍进来.老张从右门出,你就收左墙的苞谷,我就从侧屋翻墙进来". 在这个过程中, 事件就是:"老张吃完饭去喝茶" 委托就是:"把前门的苞谷收了" 回调函数就是:"找老张的老婆去耍" sender就是:老张 事件句柄就是: 淑芬 EventA…
写在前面 Delegate Predicate Action Func 逆变和协变 先说下什么是委托(Delegate),委托在C#中是一种类型,和Class是一个级别,但是我们经常把它看做是一个方法.为什么是方法?准确的说应该是回调函数,在C运行时的qsort函数获取指向一个回调函数的指针,以便对数组中的元素进行排序.C#中提供了一种机制,就是委托,一种回调函数的机制. 在我们做项目的过程中,委托用到的地方很多,像线程中修改窗体的状态.窗体控件事件和异步操作已完成等,以前我们创建委托的时候用d…
[提示] 1. 阅读文本前希望您具备如下知识:了解单元测试,了解Dynamic,熟悉泛型(协变与逆变)和Lambda,熟悉.NET Framework提供的 Action与Func委托.2.如果您对单元测试无兴趣请止步. 3.本文将使用一些我自己的测试公共代码,位于https://idletest.codeplex.com/,此处亦非常欢迎来访. 4.关于本人之前单元测试的文章可参阅 <在Visual Studio 2012使用单元测试>. <VS2012 单元测试之泛型类(Generi…
http://simpleprogrammer.com/2010/09/24/explaining-what-action-and-func-are/ Explaining What Action And Func Are In C#, Action and Func are extremely useful tools for reducing duplication in code and decreasing coupling. It is a shame that many develo…
Action Action<T> Func Func<T> Action:封装一个方法,该方法不具有参数并且不返回值 public delegate void Action() Action<T>:Action的泛型实现了1到16个传入参数的定义,但是仍然没有返回值,得出结论Action不支持返回值,如果需要返回值请使用另一个系统委托Func public delegate void Action<in T>(T obj) ... public delega…
C#中的Action<>和Func<> 其实他们两个都是委托[代理]的简写形式. 一.[action<>]指定那些只有输入参数,没有返回值的委托 Delegate的代码: [csharp] view plain copy print? public delegate void myDelegate(string str);   public static void HellowChinese(string strChinese)   {        Console.W…
委托,在C#编程中占有极其重要的地位,委托可以将函数封装到委托对象中,并且多个委托可以合并为一个委托,委托对象则可以像普通对象一样被存储.传递,之后在任何时刻进行调用,因此,C#中函数回调机制的实现基本上依赖于委托.C#的delegate关键字用于声明委托,它具有将声明委托类型映射到System.Delegate类的能力,System.Delegate类位于mscorlib.dll中,是.NET的基础核心类之一.使用delegate关键字声明一个委托,实质上创建了System.Delegate的…
Action和Func泛型委托实际上就是一个.NET Framework预定义的委托,3.5引入的特性.基本涵盖了所有常用的委托,所以一般不用用户重新声明. Action系列泛型委托,是没有返回参数的委托,最多可以有16参数,也可以没有参数:Func系列的委托是有返回值的委托,最多可以有16个参数: 元组是C# 4.0引入的一个新特性,编写的时候需要基于.NET Framework 4.0或者更高版本.元组使用泛型来简化一个类的定义. 提供用于创造元组对象的静态方法.最多可以提供创建新的 8 元…
      委托,在C#编程中占有极其重要的地位,委托可以将函数封装到委托对象中,并且多个委托可以合并为一个委托,委托对象则可以像普通对象一样被存储.传递,之后在任何时刻进行调用,因此,C#中函数回调机制的实现基本上依赖于委托.C#的delegate关键字用于声明委托,它具有将声明委托类型映射到System.Delegate类的能力,System.Delegate类位于mscorlib.dll中,是.NET的基础核心类之一.使用delegate关键字声明一个委托,实质上创建了System.Del…
C# 中的两个动态委托类型 也就是说我们不用在使用委托的时候就去声明一个委托对象,而是通过Action和Func就可以模拟出我们自己要用到的委托 区别: Action 表示没有返回值的委托  例如:Action<T1,T2,T3> Func   表示有返回值的参数    例如:Func<T1,T2,T3,TResult>  其中TResult表示的是返回值类型 代码: public int Sum(int a,int b) { return a+b; } public void o…
我们先看一个上一章的委托的例子: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Test { class Program { static void Main(string[] args) { new Program(); Console.ReadKey(); } public delegat…
使用Action.Func和Lambda表达式 在.NET在,我们经常使用委托,委托的作用不必多说,在.NET 2.0之前,我们在使用委托之前,得自定义一个委托类型,再使用这个自定义的委托类型定义一个委托字段或变量..NET 2.0给我们带来了Action.Func两个泛型委托,.NET3.0给我们带来了Lambda,这一切使得委托的定义和使用变得简单起来.下面的例子中的委托都使用了Lambda表达式. 一.Action系列的泛型委托 Action系列的委托定义的是没有返回值(返回值为void)…
Action<>和Func<>其实都是委托的[代理]简写形式. 简单的委托写法: //普通的委托 public delegate void myDelegate(string str); //Delegate委托调. myDelegate dDelegate = new myDelegate(SayHellow); dDelegate("Mr wang"); //测试方法 public static void SayHellow(string name) { C…
VS2012 Unit Test(Void, Action, Func) —— 对无返回值.使用Action或Func作为参数.多重载的方法进行单元测试 [提示] 1. 阅读文本前希望您具备如下知识:了解单元测试,了解Dynamic,熟悉泛型(协变与逆变)和Lambda,熟悉.NET Framework提供的 Action与Func委托.2.如果您对单元测试无兴趣请止步. 3.本文将使用一些我自己的测试公共代码,位于https://idletest.codeplex.com/,此处亦非常欢迎来访…
一.委托 1.1 委托的定义 delegate(委托)是一种可用于封装命名方法或匿名方法的引用类型, 委托类似于 C++ 中的函数指针: .Net通过委托来提供回调函数机制. 声明一个委托类型 internal delegate void Feedback(Int32 value); 一个简单的实例 namespace CLRExer.Delegates { //委托定义 public delegate void FeedBack(int input); public class SimpleD…
Predicate Predicate泛型委托:表示定义一组条件并确定指定对象是否符合这些条件的方法.此委托由 Array 和 List 类的几种方法使用,用于在集合中搜索元素.通过查看源码发现 Predicate  Array 先来看一下Array.FindAll 构建一个字符串类型的数组进行演示测试 第一种方式 string[] arrayString = new string[] { "One","Two","Three","Fo…