什么是委托,如何实现委托
Step 1.为什么用委托
其实很简单,当我们需要把方法传递给方法时,在C#中我们就需要使用委托。
委托类似于 C++ 函数指针,但它是托管的,类型安全的。
Step 2.怎么声明委托
委托的语法很简单,这点类似方法的定义,只是在前面多了个关键字:Delegate
我们声明一个委托,其实就是告诉编译器这种类型的委托代表哪种类型的方法,这样我们就可以创建一个或多个委托实例。
Step 3.举例
实例1
using System;
namespace Delegate
{
// 定义了一个返回值为void,两个int型参数的委托
public delegate void CalculateInt(int a,int b);
class Calculate
{
public static void Add(int a, int b)
{
Console.WriteLine(a + b);
}
public static void Square(int a, int b)
{
Console.WriteLine(a * b);
}
}
class Program
{
static void Main(string[] args)
{
CalculateInt calculateInt = new CalculateInt(Calculate.Add);// 实例化委托
// 这里实现了一个多播委托,特别强调的是多播委托的返回值类型必须为void的类型
calculateInt += new CalculateInt(Calculate.Square);
calculateInt(2, 4);
Console.Read();
}
}
}
实例 2
可以向排序算法传递对比较两个对象的方法的引用。分离比较代码使得可以采用更通用的方式编写算法。
public delegate bool CompareObject(object obj1,object obj2);
class SortObjectArray
{
// coampareObject是一个委托实例
public static void Sort(object[] arrayList, CompareObject coampareObject)
{
for (int i = 0; i < arrayList.Length; i++)
{
for (int j = i + 1; j < arrayList.Length; j++)
{
if(coampareObject(arrayList[i],arrayList[j]) )
{
object temp = arrayList[i];
arrayList[i] = arrayList[j];
arrayList[j] = temp;
}
}
}
}
}
class Student
{
string stuName;
public Student(string stuName)
{
this.stuName= stuName;
}
public string Name
{
get { return stuName; }
}
public static bool CompareName(object obj1, object obj2)
{
Student stu1 = obj1 as Student;
Student stu2 = obj2 as Student;
if (null != stu1 && null != stu1)
{
if (stu1.stuName.CompareTo(stu2.stuName) > 0)
{
return true;
}
}
return false;
}
}
class Program
{
static void Main(string[] args)
{
Student[] students = { new Student("Matthew"), new Student("Norris") ,new Student("Grant"),new Student("Aron")};
SortObjectArray.Sort(students,new CompareObject(Student.CompareName));
foreach (Student stu in students)
{
Console.WriteLine(stu.Name);
}
Console.Read();
}
}
转载于:https://www.cnblogs.com/matthew/archive/2008/08/15/1268024.html
什么是委托,如何实现委托相关推荐
- 委托、多播委托(MulticastDelegate)
委托.多播委托(MulticastDelegate) 多播委托(MulticastDelegate)继承自 Delegate ,表示多路广播委托:即,其调用列表中可以拥有多个元素的委托.实际上,我们自 ...
- C# 委托 (一)—— 委托、 泛型委托与Lambda表达式
C# 委托 (一)-- 委托. 泛型委托与Lambda表达式 2018年08月19日 20:46:47 wnvalentin 阅读数 2992 版权声明:此文乃博主之原创.鄙人才疏,望大侠斧正.此文可 ...
- C#中的三种委托方式:Func委托,Action委托,Predicate委托
C#中的三种委托方式:Func委托,Action委托,Predicate委托. Func,Action,Predicate全面解析 首先来说明Func委托,通过MSDN我们可以了解到,Func委托有如 ...
- 转载-C#委托之多播委托( 二)
通过一个委托调用多个方法可能导致一个大问题,多播委托包含一个逐个调用的委托集合,如果通过委托调用的其中一个方法抛出一个异常,整个迭代就会停止 示例如下:Action为无参委托 static void ...
- C# 委托、匿名委托、Lambda表达式详解
文章目录 委托 委托概述 声明委托类型 创建委托对象 给委托赋值 组合委托 为委托添加方法 从委托移除方法 调用委托 委托的示例 调用带有返回值的委托 调用带有引用参数的委托 匿名方法 使用匿名方法 ...
- 委托学习——4. 委托的高级使用
1. 多播(Multicast)委托:一个委托内部封装多个方法 使用形式如下 action1 += action2;//action1先把action2封装 action1 += action3;// ...
- C#委托,多播委托,匿名委托,事件
委托 委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递.事件是一种特殊的委托. 委托是方法的抽象,它存储的就是一系列具有相同签名和返回类型的方法的地址.调用委托的时候,委 ...
- C语言中的函数指针、函数的直接/间接调用、C# 委托(自定义委托、内置泛型委托、委托的实例化、委托的一般使用(模板方法、回调方法)、泛型委托、多播委托、同步/异步使用委托)
文章目录 C语言中的函数指针 函数的直接调用与间接调用 Java中没有与委托对应的功能实体 C# 委托 C# 自定义委托类型 C# 内置泛型委托类型 委托的实例化 委托也支持泛型的使用 委托的一般使用 ...
- C#学习记录(七)委托、高级委托
目录 1.什么是委托 2.委托的一般使用 3.多播(multicast)委托 1.什么是委托 委托(delegate)是函数指针的升级版 实例C/C++中的函数指针 一切皆地址 变量(数据)是以某个地 ...
- c# 委托 与事件——委托(加深理解)
接触c# 已经有段时间,也在项目中历练了一段时间.回头看一看,是时候总结下这段时间的不足,给自己的模糊处,做个标记.首先是: 事件与委托 原因:应用频繁,使用方便 c#委托(Delegate) 首先委 ...
最新文章
- 《赛博朋克2077》是捏脸游戏?上科大学生社团开发了一款赛博“滤镜”
- jcenter下载慢
- [转]GridView 72般绝技
- linux环境 phpstudy集成环境中设置php永久环境变量
- celery定时任务简单使用
- 4245: KI的斐波那契 递归
- js转义字符 php 反转义6,JS实现HTML标签转义及反转义
- pytorch学习笔记(3):常用网络层介绍
- Spring RedisTemplate 批量获取值的2种方式
- Sqlite中文资料
- Android ImageView(插入图片)属性详解
- 7.性能之巅 洞悉系统、企业与云计算 --- 内存
- 在Linux中编译jrtplib
- CodeSmith 7.01破解
- 小学生学AD16(入门级别,看这篇就够了)
- 面试秘籍 | 测试工程师的简历该怎么写?(带样例)
- vue动态添加下划线
- 深度解密 Python 列表的实现原理
- 基于java+springboot+mybatis+vue+elementui的眼镜商城系统
- 服务器无盘网卡设置,安装无盘时各种网卡最佳设置
热门文章
- SMSD短信转发群发工具详细使用教程
- linux桌面版mint安装,在Linux Mint系统上安装Spotify桌面客户端的方法
- mapper.xml中大于、小于、不等于号的方法
- 克服“水土不服”,融云助攻小象直播杀破“出海重围”
- 抽签 c++二分查找
- 第21篇:判断Weblogic详细版本号的方法总结
- 9个有趣又实用的在线学习网站,个个免费高质量,刷到别错过
- c# 跨网段扫描的方法
- 【SCI征稿】IEEE旗下1区人工智能类SCI, 稳定检索22年,仅3个月左右录用~
- 关于网上购物流程和如何维护网购权益