再谈.NET委托(delegate、Func<>)】的更多相关文章

之前写过一篇关于C#委托与事件的文章(见<C#委托和事件例析>),不过还是收到一些网友的提问.所以,今天再换另一个角度来详解一下这个问题. 一.在控制台下使用委托和事件 我们都知道,C#中有“接口”这个概念,所谓的“接口”就是定义一套标准,然后由实现类来具体实现其中的方法,所以说“接口,是一组类的抽象”.同样道理,我们可以将“委托”理解为“方法的抽象”,也就是说定义一个方法的模板,至于这个方法具体是怎么样的,就由方法自己去实现. 我们知道接口的最大好处就是可以实现多态,同理,“委托”是可以实现…
为了演示委托,我们先来定义一个方法:public static bool IsTen(int i){    return i == 10 ? true : false;} 如果要用自定义委托,则需要声明:delegate bool  IsTenDelegate(int i); 示例一://这是最基本的写法IsTenDelegate d = new IsTenDelegate(IsTen);Console.WriteLine(d(10)); //true 示例二://自定义匿名委托IsTenDel…
委托,顾名思义,就是让其他代理,本质就是为具有共性方法组定义一个方法模板:(交流可以加qq群:435226676) 委托常见的方式有一般委托显示定义,Func<T,TResult> (T,表示传入参数的类型,TResult)表示返回的类型,可以最多有四个参数传入, Action<T>,与Func的唯一区别是没有返回值:Predicate <T>就比较多单一了, 只能传入一个参数,然后返回一个bool值. 下面是示例代码: using System; using Syst…
以前一直迷迷糊糊的,现在总算搞明白. Lambda表达式 Lamda表达式基本写法是()=>{ };Lambda和方法一样都可以传入参数和拥有返回值.(int x)=>{return x;};Lambda表达式并不是C#独有的,其它语言也拥有Lambda表达式. 一些文档上写Lambda是匿名函数,我认为是不对的,Lambda可以表示一个匿名函数,但是还可以来表示Linq表达式啊. delegate委托 委托基本的使用包括声明一个委托.实例化一个委托.使用一个委托. // 声明一个委托,类型是…
1.使用简单委托 namespace 简单委托 { class Program { //委托方法签名 delegate void MyBookDel(int a); //定义委托 static MyBookDel myBookDel; //普通方法 public static void MathBook(int a) { Console.WriteLine("我是数学书" + a); } static void Main(string[] args) { myBookDel += Ma…
C# 委托应用总结 一.什么是委托 1.1官方解释 委托是一种定义方法签名的类型.当实例化委托时,您可以将其实例与任何具有兼容签名的方法相关联.您可以通过委托实例调用方法. 1.2个人理解 委托就是执行方法(函数)的一个类. 事件是一种特殊的委托. 二.如何申明委托 2.1 delegate public delegate int TestDelegate(int x, int y); 2.2 Action Action是无返回值的泛型委托. Action 表示无参,无返回值的委托 Action…
1. 什么是委托 官方解释 委托是定义方法签名的类型,当实例化委托时,您可以将其实例化与任何具有兼容签名的方法想关联,可以通过委托实例调用方法. 个人理解 委托通俗一点说就是把一件事情交给别人来帮助完成,而在C#中也可这样理解为委托就是动态调用方法.委托就是一个类,它定义了一个类,使得可以将方法当做另一个方法参数传递,这种将方法动态的赋给参数的做法,可以避免我们在程序中使用大量的 If-Else语句,同时使得程序具有更好的可拓展性. 2. delegate Delegate至少0个参数,至多32…
stackoverflow上有人问,为什么不能把委托放在一个接口当中? 投票最多的第一个答案第一句话说,“A Delegate is just another type, so you don't gain anything by putting it inside the interface.” 翻译过来大致意思就是:委托只是一种类型,把委托放在接口中你什么也得不到. 看上去挺拗口的,如果你也感觉这句话说的不知所云,那么只能求助于MSDN的接口和委托的定义. 接口:只包含方法.属性.事件或索引…
1.平时我们如果要用到委托一般都是先声明一个委托类型,比如: private delegate string Say(); string说明适用于这个委托的方法的返回类型是string类型,委托名Say后面没有参数,说明对应的方法也就没有传入参数. 写一个适用于该委托的方法: public static string SayHello() { return "Hello"; } 最后调用: static void Main(string[] args) { Say say = SayH…
目录 # 什么是委托 # 委托声明.实例化和调用 1.声明 2.委托的实例化 3.委托实例的调用 4.委托完整的简单示例 #泛型委托 1.Func委托 2.Action委托 3.Predicate委托 #匿名委托 #Lambda表达式 1.表达式Lambda 2.语句Lambda 3.Lambda的主要用处 #多播委托 #参考: # 什么是委托 1.从数据结构来讲,委托是和类一样是一种用户自定义类型. 2.委托是方法的抽象,它存储的就是一系列具有相同参数和返回类型的方法的地址.调用委托的时候,委…
C# 知识回顾 - 委托 delegate [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6031892.html 目录 What's 委托 委托的属性概述 使用委托 What's 委托 delegate 是表示对具有特定参数列表和返回类型的方法的引用的类型.在实例化委托时,你可以将其实例与任何具有兼容签名和返回类型的方法相关联.你可以通过委托实例调用方法.委托用于将方法作为参数传递给其他方法.事件处理程序就是通过委托调用的方法.你可以创建一个自定…
本文是根据书本&网络 前人总结的. 1. 前言 定义&介绍: 委托Delegate是一个类,定义了方法的类型, 使得可以将方法当做另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大佬使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性. 我们知道委托是一个引用类型,所以它具有引用类型所具有的通性.它保存的不是实际值,而是保存对存储在托管堆(managed heap)的对象的引用.那它保存的是对什么的引用呢?它保存的是对函数(function)的…
在c#的学习过程中,学到委托与事件总会迷糊一段时间,迷糊过后自然而就似懂非懂了~,所以最近我打算把以前所学的迷糊过的知识总结,温故知新,总结记录下来. 首先,我们来看一下msdn对委托的定义: delegate 关键字用于声明可用来封装命名方法的引用类型.委托大致类似于 C++ 中的函数指针:但是,委托是类型安全和可靠的. delegate 可让您传递一个函数作为参数.委托的类型安全要求作为 delegate 传递的函数具有与 delegate 声明相同的签名. 委托是事件的基础. 我们都知道,…
委托是一种存储函数引用的类型,在事件和事件的处理时有重要的用途 通俗的说,委托是一个可以引用方法的类型,当创建一个委托,也就创建一个引用方法的变量,进而就可以调用那个方法,即委托可以调用它所指的方法. 使用委托 委托的使用需要以下步骤: 定义委托 delegate double ParocessDelegate(double param1,double param2); 委托的定义非常类似于函数,但不带函数体,且要使用delegate关键字.委托定义需要指明委托名称以及一个返回类型和一个参数列表…
理解委托(delegate)及为什么要使用委托 委托:是一种定义方法签名的类型. 当实例化委托时,您可以将其实例与任何具有兼容签名的方法相关联. 您可以通过委托实例调用方法. 上述为官方说法,理解起来比较难,举个生活中的例子: 某人有三子,让他们各自带一样东西出门,并带回一头猎物.上面一句话可以理解为父亲对儿子的委托:猎物 办法(工具 某工具)-->delegate 猎物(返回值) 带回猎物(委托名)(工具(参数类型) x)-->delegate int GetValue(int i)三个人执…
前言 委托其实一直以来都感觉自己应该挺熟悉的,直到最近又去翻了翻 CLR via C#,感觉我之前的理解可能还有失偏颇.在这记录一下. 之前文章的链接: 接口和委托的泛型可变性 C#高级编程笔记 Delegate 的粗浅理解 2016年9月 13日 委托(Delegate) 说起委托,我们首先应该想到 回调函数 .NET-Framework 通过委托 来提供回调函数机制.委托确保回调方法是类型安全的,委托还允许调用多个方法,并支持静态方法和实例方法. 下面通过一个具体实例来分析委托的声明,创建,…
一.什么是委托: 委托是寻址方法的.NET版本,使用委托可以将方法作为参数进行传递.委托是一种特殊类型的对象,其特殊之处在于委托中包含的只是一个活多个方法的地址,而不是数据.   二.使用委托: 关键字:delegate 1.声明:       public delegate void DoNothing();//定义一个无返回值,无参数的委托      public delegate int GetNum(int i); //定义有一个返回值int ,参数int 的委托 2.创建方法: pub…
再谈变量作用域与变量引用 by:授客 QQ:1033553122 module3.py #!/usr/bin/env python # -*- coding:utf-8 -*-   __author__ = 'shouke'   var = 'var_in_module3'   module2.py #!/usr/bin/env python # -*- coding:utf-8 -*-   __author__ = 'shouke' from module3 import var   clas…
C# -- 等待异步操作执行完成的方式 C# -- 等待异步操作执行完成的方式 1. 等待异步操作的完成,代码实现: class Program { static void Main(string[] args) { Func<int, int> mySum1 = SumNumbers; Func<int, int> mySum2 = SumNumbers; Func<int, int> mySum3 = SumNumbers; AsyncCallback callba…
C#的内置委托类型 Func Action 返回值 有(只有一个Tresult) 无 重载 17个(0参-16参) 17个(0参-16参) 泛型 支持 支持 系统内置 是 是 是否需要声明 否 否 class Class1 { public delegate void Del();//声明委托 public static void F1() { Console.WriteLine("第一个方法"); } public static void F2() { Console.WriteLi…
C# 知识回顾 - 委托 delegate (续) [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6046171.html 序 上篇<C# 知识回顾 - 委托 delegate>已经介绍委托的基本知识,这里是对其进行补充说明及加深理解. 目录 两个简单 Demo:带命名方法的委托和带匿名方法的委托 创建多播委托 委托的简单演化过程 一.两个简单 Demo:带命名方法的委托和带匿名方法的委托 委托可以与命名方法关联.  使用命名方法对委托进行实例化…
[转载]再谈百度:KPI.无人机,以及一个必须给父母看的案例 发表于 2016-03-15   |   0 Comments   |   阅读次数 33 原文: 再谈百度:KPI.无人机,以及一个必须给父母看的案例 转载:http://xiaoyu2er.github.io/2016/03/15/baidu-do-evil/ 2016年03月15日下午歪理邪说公众号发送如下消息: 果不其然到晚上7点之前, 文章已经被人举报, 本想截取微信公众号的各种评论现在也不行了. 好在已经有很多网站转载了这…
目录 Support Vector Machine (1) : 简单SVM原理 Support Vector Machine (2) : Sequential Minimal Optimization Support Vector Machine (3) : 再谈泛化误差(Generalization Error) Support Vector Machine Python 代码实现 Support Vector Machine(3) : 再谈量化误差(Generalization Error)…
这是从 Unity教程之再谈Unity中的优化技术 这篇文章里提取出来的一部分,这篇文章让我学到了挺多可能我应该知道却还没知道的知识,写的挺好的 优化几何体   这一步主要是为了针对性能瓶颈中的”顶点处理“一项.这里的几何体就是指组成场景中对象的网格结构.   3D游戏制作都由模型制作开始.而在建模时,有一条我们需要记住:尽可能减少模型中三角形的数目,一些对于模型没有影响.或是肉眼非常难察觉到区别的顶点都要尽可能去掉.例如在下面左图中,正方体内部很多顶点都是不需要的,而把这个模型导入到Unity…
本文转载自努力,努力,努力 1. 委托的定义:委托是函数的封装,它代表一"类"函数.他们都符合一定的签名:拥有相同的参数列表,返回值类型.同时,委托也可以看成是对函数的抽象,是函数的"类".此时,委托的实例将代表一个具体的函数.委托声明和定义了一个引用类型,它用来封装方法,用指定的签名来封装方法.一个委托的实例,可以封装静态或者实例方法.委托是一种引用的类型,一旦为委托分配了方法,委托将与该方法完全相同的行为,委托方法的使用可以像其他任何方法一样, 具有参数和返回值…
HTTP协议与HTML表单(再谈GET与POST的区别) GET方式在request-line中传送数据:POST方式在request-line及request-body中均可以传送数据. http://www.cnblogs.com/hyddd/archive/2009/03/31/1426026.html Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE.URL全称是资源描述符,我们可以这 样认为:一个URL地址,它用于描述一个网络上的资…
转载:http://www.qtcn.org/bbs/simple/?t31383.html Another Look at Events(再谈Events) 最近在学习Qt事件处理的时候发现一篇很不错的文章,是2004年季刊的一篇文章,网上有这篇文章的翻译版,但是感觉部分地方翻译的比较粗糙,不是很明确.索性重新翻译了一遍,并引用了原翻译版的一段译注.以下都是用自己能理解的方式来翻译的,由于水平有限,有很多不足的地方,希望大家指正. Another Look at Events (再谈Event…
STL实践与分析 --再谈string类型(下) 四.string类型的查找操作 string类型提供了6种查找函数,每种函数以不同形式的find命名.这些操作所有返回string::size_type类型的值,下面标的方式标记查找匹配所发生的位置:或者返回一个string::npos的特殊值,说明查找没有匹配.string类将npos定义为保证大于不论什么有效下标的值. string类型的查找操作(參数在下表定义) s.find(args) 在s中查找args的第一次出现 s.rfind(ar…
再谈json 近期在项目中使用到了highcharts ,highstock做了一些统计分析.使用jQuery ajax那就不得不使用json, 可是在使用过程中也出现了非常多的疑惑,比方说,什么情况下我们须要去将字符串转换为json对象.什么情况下就不须要转换. 通过hql和sql查询返回的list,通过json array 写入response,接下来json就上场了. 在这里就复制粘贴,再对其的基本定义进行一些区分. json:(JavaScript Object Notation) 是一…
STL实践与分析 --再谈迭代器[下] 三.反向迭代器[续:习题] //P355 习题11.19 int main() { vector<int> iVec; for (vector<int>::size_type index = 0; index != 10; ++index) { iVec.push_back(index); } for (vector<int>::reverse_iterator r_iter = iVec.rbegin(); r_iter !=…