一、什么是委托?

委托就是定义一个 对于方法的引用,类似于c++中的函数指针。委托是用来将方法作为参数 传递进入其它方法的,

委托的格式?
 修饰符1 delegate  修饰符2  委托类型名(变量n);

修饰符1 为定义的委托的范围修饰符,常用public;
 修饰符2为 返回值类型修饰符,如 :  void ,string ,char等;
 名字 为我们定义一个委托类型时所为它取得名字;

对于 变量n  我们常常会有疑惑,委托是一个 方法吗?  为什么会有返回值 以及变量呢 ?
其实,委托并不是一个方法 ,而是一个 类型,它之所以有返回值以及变量是为了 保持 与其委托的方法 保持一致;

注意 : 委托是一个 类型  所以我们常常把它定义在一个 类的外面;
 还有 ,委托类型定义之后,我们还不能直接拿过来使用,还需要对它定义该类型的 委托变量;

格式 :
修饰符1 delegate  修饰符2  委托类型名(变量n);
委托类型名   委托变量;

使用时,还需要注意,我们在使用时要使用定义的委托变量,而不是定义的委托类型名,这类似于我们定义枚举型一样; 因为定义的委托变量是一个变量,所以 在使用之前我们还要对其进行赋值。

格式: 修饰符1 delegate  修饰符2  委托类型名(变量n);
           委托类型名   委托变量;
           委托变量=委托方法名;

注意: 这里的委托方法名就是你要委托的方法的名字,而且注意,不要加上了方法的参数以及括号,同时 ,这里委托的方法 还要与 该委托类型定义时所 定义的  返回值类型、参数列表类型以及参数个数  保持一致;

我们要先定义一个 方法;
   范围修饰符  【static】 返回值类型修饰符    调用方法名( 变量n, 委托类型  委托变量)
{
      委托变量(变量n);
         .
         .
         .
    委托变量(变量 n);
}
 
上边的变量n就是你所委托的方法的参数;

开始使用了 :
1)   委托类型  委托变量; 
2)   委托变量=委托方法名;
3)   调用方法名(变量n,委托变量);
完整示例如下:

 using System;

 using System.Collections.Generic;
using System.Text; namespace 委托示例
{
public delegate void del(string str); //定义的委托类型
calss 示例
{
static void send(string i) //要委托的方法
{
console.WriteLine(i);
} static void sendup(string list,del handler) //调用方法
{
handler(list);
} public static void mian(string [] args) //主方法
{
del 委托变量=send; // 该句相当于: del 委托变量; 委托变量=send;
sendup("这是一个 委托的示例!!!",委托变量);
console.ReadKey();
} }
}

二、Action与Func

Action委托:封装一个方法,该方法具有参数(0到16个参数)并且不返回值

Func<T,TResult>委托:封装一个方法,该方法具有参数(0到16个)和一个返回值

实例:

 public class DeleDemo
{
/// <summary>
/// 有一个参数但没有返回值
/// </summary>
/// <param name="str"></param>
public static void Say(string str)
{
Console.WriteLine(str);
}
/// <summary>
/// 有两个参数,有一个返回值
/// </summary>
/// <param name="a"></param>
/// <param name="b"></param>
/// <returns></returns>
public static int Add(int a, int b)
{
return a + b;
}
Action<string> action = new Action<string>(Say);
Func<int, int, int> func = new Func<int, int, int>(Add); /// <summary>
/// 将委托作为参数传给方法
/// </summary>
/// <param name="action"></param>
/// <param name="func"></param>
public void Test(Action<string> action,Func<int,int,int> func)
{
action("Hello");
Console.WriteLine(func(, ));
} /// <summary>
/// 主函数
/// </summary>
public void Main()
{
Test(action, func); //调用Test方法
}
}

三、Predicate

是返回bool型的泛型委托,Predicate有且只有一个参数,返回值固定为bool。表示定义一组条件并确定指定对象是否符合这些条件的方法。此方法常在集合(Array 和 List<T>)的查找中被用到,如:数组,正则拼配的结果集中被用到。

 public class PredicateDemo
{
public int[] myNum = new int[] { , , , , , , , }; //定义一个数据
public int[] myResult; //返回结果 //定义一个方法,只有一个参数且返回bool类型,判断是否是偶数
public static bool IsEven(int num)
{
if (num % == )
{
return true;
}
else
{
return false;
}
}
Predicate<int> predicate = new Predicate<int>(IsEven); /// <summary>
/// 主程序
/// </summary>
private void Main()
{
//bool res = predicate(23);
myResult = Array.FindAll<int>(myNum, predicate); //调用
}
}

总结:

.net委托(转载)的更多相关文章

  1. C#委托(转载)

    C#委托的介绍(delegate.Action.Func.predicate) from:http://www.cnblogs.com/akwwl/p/3232679.html 委托是一个类,它定义了 ...

  2. C#动态对象(dynamic)示例(实现方法和属性的动态)

    C#的动态对象的属性实现比较简单,如果要实现动态语言那种动态方法就比较困难,因为对于dynamic对象,扩展方法,匿名方法都是不能用直接的,这里还是利用对象和委托来模拟这种动态方法的实现,看起来有点J ...

  3. 转载 C#匿名函数 委托和Lambda表达式

    转载原出处: http://blog.csdn.net/honantic/article/details/46331875 匿名函数 匿名函数(Anonymous Function)是表示“内联”方法 ...

  4. 转载:C#中事件和委托的编译代码

    接上文转载:C#中事件的由来,这时候,我们注释掉编译错误的行,然后重新进行编译,再借助Reflactor来对 event的声明语句做一探究,看看为什么会发生这样的错误: public event Gr ...

  5. 转载: jQuery事件委托( bind() \ live() \ delegate()) [委托 和 绑定的故事]

    转载:http://blog.csdn.net/zc2087/article/details/7287429 随着DOM结构的复杂化和Ajax等动态脚本技术的运用,事件委托自然浮出了水面.jQuery ...

  6. Delegate,Action,Func,匿名方法,匿名委托,事件 (转载)

    Delegate,Action,Func,匿名方法,匿名委托,事件 (转载) 一.委托Delegate 一般的方法(Method)中,我们的参数总是string,int,DateTime...这些基本 ...

  7. [转载]C#深入分析委托与事件

    原文出处: 作者:风尘浪子 原文链接:http://www.cnblogs.com/leslies2/archive/2012/03/22/2389318.html 同类链接:http://www.c ...

  8. [转载]C#委托和事件(Delegate、Event、EventHandler、EventArgs)

    原文链接:http://blog.csdn.net/zwj7612356/article/details/8272520 14.1.委托 当要把方法作为实参传送给其他方法的形参时,形参需要使用委托.委 ...

  9. C#委托的介绍(delegate、Action、Func、predicate) --转载

    来源:http://www.cnblogs.com/akwwl/p/3232679.html 委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递.事件是一种特殊的委托. 1 ...

  10. 《C#高级编程》之委托学习笔记 (转载)

    全文摘自 http://www.cnblogs.com/xun126/archive/2010/12/30/1921551.html 写得不错,特意备份!并改正其中的错误代码..     正文: 最近 ...

随机推荐

  1. RealtekRTL8111内建网卡-黑苹果之路

    真是服了这神一样的黑苹果.好不容易配好显卡,登陆appstore却报“无法验证您的设备或电脑”,查了一圈,又说要配网卡为en0的,有说要在clover中配FIXLAN的,最准确的是网卡必须是内建(Bu ...

  2. UIAutomator 编译

    环境搭建 1.必备条件: 1.JDK    2.SDK(API高于15)    3.Eclipse(安装ADT插件)    4.ANT(用于编译生成jar) 2.简要步骤: 1.安装JDK并添加环境变 ...

  3. 仿淘宝详情转场(iOS,安卓没有这功能)

    由于公司是做跨境电商的,所以对各大电商APP都有关注,最近看到淘宝iOS端(安卓没有)在商品详情点击加入购物车有一个动画效果特别赞,正好今天新版本上线,下午就抽了些时间研究了下. 主要思路是自定义转场 ...

  4. Asp.net 怎样去除表单多行文本框滚动条

    <textarea style="overflow:hidden;border-width:0px;">永远没有滚动条</textarea><text ...

  5. [转载]:Fortran字符串的故事

    一. Fortran 字符串与 C 字符串的区别  Fortran的字符串处理能力其实很弱,关于字符串的语法还很落后.它与 C 字符串最大的区别就是:Fortran字符串是固定长度的,没有 \0 结束 ...

  6. 配置VS使用winteracter

    一.winteracter是什么?为什么要用VS代替wide?winteracter 是一款强大的 Fortran 图形界面函数库,可方便的用 Fortran 生成GUI界面,对话框,菜单,绘图等操作 ...

  7. JavaScript 为什么要通过原型 prototype 调用函数, 而不是直接调用?

    现象 经常在网上或者阅读源码时看到下面的代码: Array.prototype.slice.call(arr, 3); 而不是 arr.slice(3); 原因 这是为什么呢, 毕竟下面这种方法更短, ...

  8. [原创] 更新Ubuntu自带的python2.X版本 ImportError: No module named pip;ImportError: No module named _sqlite3

    Ubuntu14.04自带的Python2版本,是2.7.6的,想更新为最新的2.7.11,操作如下: 1. 从python官网下载2.7.11的source源码包 Python-2.7.11.tgz ...

  9. zend 快捷键

    Ctrl+1 快速修复(最经典的快捷键,就不用多说了)Ctrl+D: 删除当前行Ctrl+Alt+↓ 复制当前行到下一行(复制增加)Ctrl+Alt+↑ 复制当前行到上一行(复制增加)Alt+↓ 当前 ...

  10. Multipart to single part feature

    Multipart to single part feature Explode Link: http://edndoc.esri.com/arcobjects/8.3/?URL=/arcobject ...