转自:http://www.cnblogs.com/Joetao/articles/2094271.html

本节学习了泛型委托Action<T>和Fun<TResult>两类特殊的委托,这两个特殊的委托是Dot FrameWrok自带的。结合lambda表达式,可以在写程序时,简洁代码和提高编码效率。

(一)Action<T>和Fun<TResult>两个委托的不同点:

Action<T>只能委托必须是无返回值的方法

Fun<TResult>只是委托必须有返回值的方法

(二)代码演练

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

//方法一:显式声明了一个委托,并将对 实例方法的引用分配给其委托实例。
public delegatevoid ShowName();
public delegatevoid ShowNameWithParameter(string name);
public delegatevoid ShowAge(int age);
public delegatevoid ShowNameAndAge(string name, int age);
public delegateint ReturnName(string name);
namespace ActionDemo
{
publicclass Person
{
privatestring instanceName;

publicstring InstanceName
{
get { return instanceName; }
set { instanceName = value; }
}
privateint instanceAge;

publicint InstanceAge
{
get { return instanceAge; }
set { instanceAge = value; }
}
public Person(string name,int age)
{
this.instanceName = name;
this.instanceAge = age;
}
publicvoid DisplayName()
{
Console.WriteLine("Name:{0}",this.instanceName);
}
publicvoid DisplayName(string name)
{
Console.WriteLine("Name:{0}",name);
}
publicvoid DisplayAge(int age)
{
Console.WriteLine("Age:{0}",age);
}
publicvoid DisplayNameAndAge(string name, int age)
{
Console.WriteLine(string.Format("Name:{0} And Age:{1} ",name,age));
}
publicint GetAgeByName(string name)
{
if(name==instanceName)
{
return instanceAge;
}
else
{
return-1;
}

}

}
class Program
{
privatestaticvoid Print(string s)
{
Console.WriteLine(s);
}

staticvoid Main(string[] args)
{
#region Action<T>相关
Person person =new Person("joetao",21);
//非泛型委托
//ShowName showName = new ShowName(name.DisplayName);
//另一种写法
ShowName showName = person.DisplayName;
showName();
ShowNameWithParameter showNameWithParameter = person.DisplayName;
showNameWithParameter(person.InstanceName);
ShowAge showAge = person.DisplayAge;
showAge(person.InstanceAge);
ShowNameAndAge showNameAndAge = person.DisplayNameAndAge;
showNameAndAge(person.InstanceName, person.InstanceAge);

string> actionShowName1 = person.DisplayName;
actionShowName1(person.InstanceName);
Action<int> actionShowAge = person.DisplayAge;
actionShowAge(person.InstanceAge);
Action<string, int> actionShowNameAndAge = person.DisplayNameAndAge;
actionShowNameAndAge(person.InstanceName, person.InstanceAge);
Action<string> actionShowName1 = person.DisplayName;
actionShowName1(person.InstanceName);
Action<int> actionShowAge = person.DisplayAge;
actionShowAge(person.InstanceAge);
Action<string, int> actionShowNameAndAge = person.DisplayNameAndAge;
actionShowNameAndAge(person.InstanceName, person.InstanceAge);string> actionShowName1 = person.DisplayName;
actionShowName1(person.InstanceName);
Action<int> actionShowAge = person.DisplayAge;
actionShowAge(person.InstanceAge);
Action<string, int> actionShowNameAndAge = person.DisplayNameAndAge;
actionShowNameAndAge(person.InstanceName, person.InstanceAge);
 

C#学习笔记:泛型委托Action<T>和Fun<TResult>的更多相关文章

  1. C#语法糖之第五篇: 泛型委托- Action<T>

    因为工作的原因(其实还是个人的惰性)昨天没有给大家分享文章,然后这几天也有很多园友也提出了他们报告的意见及指导,再次感谢这些兄弟们的照顾我 和支持,这个分类的文章我当时想的是把我的学习经验和工作中用到 ...

  2. 【web开发学习笔记】Structs2 Action学习笔记(两)

    action学习笔记2-大约action method讨论 Action运行的时候并不一定要运行execute方法,能够在配置文件里配置Action的时候用method=来指定运行哪个方法 也能够在u ...

  3. [C#学习笔记]Func委托与Action委托

    学习一项新知识的时候,最好的方法就是去实践它. 前言 <CLR via C#>这本神书真的是太有意思了!好的我的前言就是这个. Fun 如果要用有输入参数,有返回值的委托,那么Func委托 ...

  4. 泛型委托Action与ActionT

    以前都是自己写委托,其实系统内部给我们系统了委托的. Action ——委托的非泛型版本就是一个无参数无返回值的委托. Action<T>——委托的泛型版本是一个无返回值,但是参数个数及类 ...

  5. 《C# 语言学习笔记》——委托

    委托是一种可以把引用存储为函数的类型. 委托的声明非常类似于函数,但不带函数体,且要使用delegate关键字.委托的声明制定了一个返回类型和一个参数列表. 在定义了委托后,就可以声明该委托类型的变量 ...

  6. c#学习笔记之委托

    委托 最近自己在调试C#项目,发现经常可以看到委托和lambda表达式,各种花里胡哨的写法把我给整的云里雾里的,于是自己特意花了一点功夫来整理关于delegate的相关知识,方便自己日后查阅. 何为委 ...

  7. [读书笔记]C#学习笔记二: 委托和事件的用法及不同.

    前言:  C#委托是什么 c#中的委托可以理解为函数的一个包装, 它使得C#中的函数可以作为参数来被传递, 这在作用上相当于C++中的函数指针. C++用函数指针获取函数的入口地址, 然后通过这个指针 ...

  8. 委托delegate 泛型委托action<> 返回值泛型委托Func<> 匿名方法 lambda表达式 的理解

    1.使用简单委托 namespace 简单委托 { class Program { //委托方法签名 delegate void MyBookDel(int a); //定义委托 static MyB ...

  9. js学习笔记-事件委托

    通过事件委托,你可以把事件处理器绑定到父元素上,避免了把事件处理器添加到多个子级元素上.从而优化性能. 事件代理用到了事件冒泡和目标元素.而任何一个元素的目标元素都是一开始的那个元素. 这里首先要注意 ...

随机推荐

  1. HTML文件中使用Java程序

    HTML文件中使用Java程序:简而言之,在HTML文件中引入java应用程序,并通过javascript调用其方法.   一. 运行环境 1.JAVA_HOME.CLASSPATH.PATH配置正确 ...

  2. Codevs 1080 线段树联系

    题目描述 Description 一行N个方格,开始每个格子里都有一个整数.现在动态地提出一些问题和修改:提问的形式是求某一个特定的子区间[a,b]中所有元素的和:修改的规则是指定某一个格子x,加上或 ...

  3. fastclick插件 导致 input[type="date"] 无法触发问题解决方案

    鄙人才疏学浅,新人一枚,不足之处还请谅解,写下这个也只是为了给大家分享一下我解决这个BUG的方法,也是自己的一个笔记. 首先,我们使用fastclick插件的初衷是解决“tap”事件“点透”的BUG: ...

  4. 学习php中常用语句与函数

    1.while循环多用于不清楚循环次数的情况下,如需要把从数据库中读取出的多条记录(不清楚到底有多少条)并且要根据某个字段的值进行分类,每类值的具体数目,如下图: 其中选项有三种值,对每个值的票数时行 ...

  5. How to check Windows 7 OS is permanently activated?[Windows 7]

    Press Windows + R, then you can enter : slmgr.vbs -xpr

  6. VS2010打开VS2012解决方法

    VS2012中对C#的支持度非常好,不管是编写方便程度(不需要插件就能高亮代码及代码自动提示功能),还对MFC的一些功能优化很多. 我们可以修改两个工程文件来把VS2012的工程文件一直到VS2010 ...

  7. Hive基本命令整理

    创建表: hive> CREATE TABLE pokes (foo INT, bar STRING);          Creates a table called pokes with t ...

  8. 【转载】mysqldump的single-transaction和master-data

    原文地址:mysqldump的single-transaction和master-data 作者:myownstars 先看一下--lock-tables和--lock-all-tables --lo ...

  9. Basic Operation about Linux

    1. 永久开启/关闭防火墙 在linux中防火墙是一个名叫iptables的工具 开启: chkconfig iptables on 关闭: chkconfig iptables off 即时生效,重 ...

  10. (菜鸟要飞系列)一,基于Asp.Net MVC5的后台管理系统(前言)

    今天真是个郁闷的日子,因为老师两个星期前给我的一个任务,用递归算法将Oracle数据库中用户信息及权限显示在jquery-treeView上,网上虽然有大神写出了这类算法,但是不贴全部代码,真的很难跟 ...