Func 委托 和 Action 委托 初步谈论】的更多相关文章

继上篇EventHandler之后,继续填坑,简单了解下Func<TResult> 委托 和 Action 委托. msdn对于两者的解释: Func<TResult>:封装一个不具有参数但却返回 TResult 参数指定的类型值的方法. Action:封装一个方法,该方法不具有参数并且不返回值. 两者的区别在于:有无返回值. 至于 Func<T,TResult>.Func<T1,T2,TResult>.... Action<T>.Action&…
今天我要说的是C#中的三种委托方式:Func委托,Action委托,Predicate委托以及这三种委托的常见使用场景. Func,Action,Predicate全面解析 首先来说明Func委托,通过MSDN我们可以了解到,Func委托有如下的5种类型: (1) *delegate TResult Func<TResult>(); (2)*delegate TResult Func<T1,TResult>(T1 arg1); (3) *delegate TResult Func&…
学习一项新知识的时候,最好的方法就是去实践它. 前言 <CLR via C#>这本神书真的是太有意思了!好的我的前言就是这个. Fun 如果要用有输入参数,有返回值的委托,那么Func委托将满足你的要求. Func泛型委托引用了一个带有一个返回值的方法,它可以传递0或者多到16个参数类型,和一个返回类型. 它可以没有传递参数,但是一定要有返回类型. Func<out TResult> Func<in T,out TResult> Func<in T1,in T2,…
1.什么是Action泛型委托 Action<T>是.NET Framework内置的泛型委托,可以使用Action<T>委托以参数形式传递方法,而不用显示声明自定义的委托.封装的方法必须与此委托定义的方法签名相对应.也就是说,封装的方法必须具有一个通过值传递给它的参数,并且不能有返回值. 2.Action委托定义 查看Action的定义: using System.Runtime.CompilerServices; namespace System { // // 摘要: //…
其实他们两个都是委托[代理]的简写形式. 一.[action<>]指定那些只有输入参数,没有返回值的委托 Delegate的代码: public delegate void myDelegate(string str); public static void HellowChinese(string strChinese) { Console.WriteLine("Good morning," + strChinese); Console.ReadLine(); } myD…
http://stackoverflow.com/questions/4317479/func-vs-action-vs-predicate The difference between Func and Action is simply whether you want the delegate to return a value (use Func) or not (use Action). Func is probably most commonly used in LINQ - for…
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…
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…
.Net 3.5之后,微软推出了Func<T>与Action<T>泛型委托.进一步简化了委托的定义. Action<T>委托主要的表现形式如下: public delegate void Action(); public delegate void Action<T1>(T1 arg1); public delegate void Action<T1, T2>(T1 arg1, T2 arg2); public delegate void Act…
.Net 3.5之后,微软推出了Func<T>与Action<T>泛型委托.进一步简化了委托的定义. Action<T>委托主要的表现形式如下: public delegate void Action(); public delegate void Action<T1>(T1 arg1); public delegate void Action<T1, T2>(T1 arg1, T2 arg2); public delegate void Act…
func 可以带返回值,action  不带返回值 平时我们如果要用到委托一般都是先声明一个委托类型,比如: private delegate string Say(); string说明适用于这个委托的方法的返回类型是string类型,委托名Say后面没有参数,说明对应的方法也就没有传入参数. 写一个适用于该委托的方法: public static string SayHello() { return "Hello"; } 最后调用: static void Main(string[…
Func和Action类是特殊的类型,它们允许你在不必指定自定义委托类型的情况下,去使用委托.在整个.NET框架中都可以使用它们.例如,在我们考察并行计算时,你也会看到这两个类的示例. 上面一段文字是官方的一段翻译.虽然看上去你不太容易能理解是什么意思.的确委托糅合C#的很多概念在里面,一时半会要真正理解其含义用途不是一件现实的事情.说实在的,我也是经历很长的时间才理解委托的用途的,虽然不太全面. 网上关于C#委托的文章很多,大多数都只是说清楚了如何使用委托,但并未解释为什么它们是有用的.当然这…
一.委托 1.1 委托的定义 delegate(委托)是一种可用于封装命名方法或匿名方法的引用类型, 委托类似于 C++ 中的函数指针: .Net通过委托来提供回调函数机制. 声明一个委托类型 internal delegate void Feedback(Int32 value); 一个简单的实例 namespace CLRExer.Delegates { //委托定义 public delegate void FeedBack(int input); public class SimpleD…
Delegate,Action,Func,匿名方法,匿名委托,事件 (转载) 一.委托Delegate 一般的方法(Method)中,我们的参数总是string,int,DateTime...这些基本的数据类型(或者没有参数),比如 publicvoid HelloWorld() {    Console.WriteLine("Hello World!");}publicvoid HelloWorld(string name) {    Console.WriteLine("…
使用委托来做一些事情,大致思路是: 1.定义声明一个委托,规定输入参数和输出类型.2.写几个符合委托定义的方法.3.把方法列表赋值给委托4.执行委托 internal delegate int MyDelegate(); class Program { static void Main(string[] args) { MyDelegate d = ReturnOne; d += ReturnTwo; foreach (int i in GetAllReturnVals(d)) { Consol…
其实很好理解的呢!~首先你需要明白,他们是委托的简写形式. 一.[action<>]指定那些只有输入参数,没有返回值的委托 1.1定义一个委托: 比如,我们原来写委托: public delegate void myDelegate(string str); 这个委托表示,它只能委托那些只有一个输入值而没有返回值的方法,比如下面的这个方法. 1.2定义方法 public static void HellowChinese(string strChinese) { Console.WriteLi…
当试图通过一个事件触发多个方法,抽象出泛型行为的时候,或许可以考虑使用委托.     通过委托构造函数或委托变量把方法赋值给委托 private delegate double DiscountDelegate(double discount); private static DiscountDelegate dd = getDiscountRate; static void Main(string[] args) { double discountPercent; discountPercen…
https://blog.csdn.net/wanglui1990/article/details/79303894 Func<ΤResult> 委托:代理(delegate)一个返回类型为「由参数指定的类型的值(TResul)」 的无参方法.使用 Func<ΤResult> 委托,无需显式定义一个委托与方法的关联. Func<ΤResult>原型: public delegate TResult Func<out TResult>() 1 Func<…
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;//线程 using System.Threading;//引用线程方法 namespace ConsoleApplication2 { class Program { static void Main(string[] args) { //委托详解 //Func返回带…
class Program { public delegate void MyDelegate(string str); static void Main(string[] args) { // MyDelegate d1 = Print; d1("简写的触发"); // d1 = new MyDelegate(Print); // d1.Invoke("使用invoke触发"); //多播委托 如果在此之前没有 赋值操作将会报错 d1 += Print; d1(&…
有了泛型委托,就有了一能适用于任何返回类型和任意参数(类型和合理的个数)的通用委托,Func 和 Action.如下所示(下面的in表示参数,out表示返回结果): delegate TResult Func <out TResult> ();delegate TResult Func <in T, out TResult> (T arg);delegate TResult Func <in T1, in T2, out TResult> (T1 arg1, T2 ar…
如题: C# func and action委托是什么? 1) 回答这个问题之前,我们需要了解什么是委托(英文 Delegate )? 为了便于理解,再往前推一步,回到c语言时代,指针的概念. 什么是指针,其实就是内存地址. 那什么是内存地址?就要先说说内存条了,通常情况下我们在网上买的内存条比如8G,16G, 这个是硬件设备. 那内存条8G和16G的含义是什么? 就涉及内存的另外两个概念: 1.内存的寻址能力. 即每个内存单位能存多少位(bit), 每一个bit,其实就是存放0或者1. 内存寻…
C# 委托应用总结 一.什么是委托 1.1官方解释 委托是一种定义方法签名的类型.当实例化委托时,您可以将其实例与任何具有兼容签名的方法相关联.您可以通过委托实例调用方法. 1.2个人理解 委托就是执行方法(函数)的一个类. 事件是一种特殊的委托. 二.如何申明委托 2.1 delegate public delegate int TestDelegate(int x, int y); 2.2 Action Action是无返回值的泛型委托. Action 表示无参,无返回值的委托 Action…
Func<T1, T2, TResult> 委托 封装一个具有两个参数并返回 TResult 参数指定的类型值的方法. 语法 public delegate TResult Func<in T1, in T2, out TResult>( T1 arg1, T2 arg2 ) 类型参数 in T1 此委托封装的方法的第一个参数类型. 该类型参数是逆变.即可以使用指定的类型或派生程度更低的类型.有关协变和逆变的更多信息,请参见泛型中的协变和逆变. in T2 此委托封装的方法的第二个…
今天在开发过程中发现.在SaveChanges的时候偶尔会抛出异常:Cannot access a disposed object. A common cause of this error is disposing a context that was resolved from dependency injection and then later trying to use the same context instance elsewhere in your application. T…
引用别人的: static void Main(string[] args) { List<string> l = new List<string>(); l.Add("a"); l.Add("b"); l.Add("s"); l.Add("t"); if (l.Exists(s => s.Equals("s"))) { string str = l.First(s =>…
本文以实例形式分析了C#中Predicate<T>与Func<T, bool>泛型委托的用法,分享给大家供大家参考之用.具体如下: 先来看看下面的例子: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 static void Main(string[] args) { List<string> l = new List<string>(); l.Add("a"); l.Add("b");…
来看使用Action委托的一个实例: static void Main(string[] args) { int i = 0; Action a = () => i++; a(); a(); Console.WriteLine(i); } 结果是期望能的2.但令人好奇的是:栈上的变量i是如何传递给Action委托的? 反编译进行查看,首先看Main方法对应的IL代码: 再看c_DisplayClass1的IL代码: 从中可以看出:→在托管堆上创建了一个名为c_DisplayClass1的实例→把…
在使用委托时,若封装的方法无返回值,并且参数在0-7个,可考虑使用.Net4.0中的Action委托,建议使用系统自带的,减少自定义 public delegate void Action<in T>(T obj);…
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication4 { public static class InvokeExt { //扩展方法进行装箱输出继承IEnumerable<T>的内容项 public static void ShowItems<T>…