c# 委托

一、委托的两个最主要的作用:

1、委托是对方法或者方法列表的引用,实例化后的委托对象会将给定的参数传递给它所回调的方法,并去执行方法。

2、委托可以将某一个方法当作另一个方法的参数来进行传递,利用这种方法便可以动态的给方法赋值,避免了在程序中大量的使用If-Else(Switch)语句,使得程序具有更好的可扩展性。

二、委托的具体实现步骤

1、声明一个委托,其返回值和参数形式一定要和想要包含的方法的返回值与参数形式一致。

public delegate void DelegateGreeting(string name);

2、提供要处理的方法

private static void GreetPeople(string name)

{

Console.WriteLine("Hello,"+name);

Console.ReadLine();

}

3、创建委托对象并将所希望的方法包含在委托对象中。

DelegateGreeting MyDelegateGreeting=new DelegateGreeting(GreetPeople);

4、通过委托对象调用包含在其中的各个方法。

MyDelegateGreeting("Darren liu”);

完整代码如下:

namespace 委托

{

class 委托1

{

public delegate void DelegateGreeting(string name);

static void Main(string[] args)

{

DelegateGreeting MyDelegateGreeting=new DelegateGreeting(GreetPeople);

MyDelegateGreeting("Darren liu");

}

private static void GreetPeople(string name)

{

Console.WriteLine("Hello,"+name);

Console.ReadLine();

}

}

}

通过上述代码,我们可以看到,所谓的委托就是一个可以保存方法的变量。委托的最终目的就是把一个类的某个方法传递到另一个类中去调用而无需传递前一个类的对象。

三、委托链

委托链就是将多个方法捆绑到同一个委托对象上。当调用这个委托对象时,将会依次调用委托链中的方法。

完整代码如下:

namespace 委托

{

class Delegate2

{

public delegate void DelegateGreeting(string name);

static void Main(string[] args)

{

DelegateGreeting MyDelegateGreeting = new DelegateGreeting(ChineseGreeting.CGreeting);

MyDelegateGreeting += EnglishGreeting.EGreeting;

//   MyDelegateGreeting -= ChineseGreeting.CGreeting;

MyDelegateGreeting("Darren liu");

}

}

class EnglishGreeting

{

public static void EGreeting(string name)

{

Console.WriteLine("Morning," + name);

Console.ReadLine();

}

}

class ChineseGreeting

{

public static void CGreeting(string name)

{

Console.WriteLine("早上好," + name);

Console.ReadLine();

}

}

四、委托可以将某一个方法当作另一个方法的参数来进行传递,代码如下:

public delegate void GreetingDelegate(string name);

class Delegate2

{

private static void EnglishGreeting(string name)

{

Console.WriteLine("Morning, " + name);

}

private static void ChineseGreeting(string name)

{

Console.WriteLine("早上好, " + name);

}

private static void GreetPeople(string name, GreetingDelegate MakeGreeting)

{

MakeGreeting(name);

}

static void Main(string[] args)

{

GreetPeople(“Darren liu ", EnglishGreeting);

GreetPeople(“Darren liu", ChineseGreeting);

Console.ReadKey();

}

}

我们可以分析以上代码,把一个委托对象GreetingDelegate MakeGreeting当作一个方法GreetPeople的参数传入该方法中。当传入的方法是EnglishGreeting时,也就是说该委托对象MakeGreeting所指定的方法就是EnglishGreeting。因此在Main中执行GreetPeople(“Darren liu ", EnglishGreeting)时,也就是执行的EnglishGreeting方法。

时间: 2024-11-05 04:47:49

c# 委托的相关文章

c#系统泛型委托

Action<T> 无返回值的系统泛型委托 namespace ConsoleApp1 { public class UserInfo { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } } class Program { private static List<UserInfo> getInit() { return new List<User

《C#图解教程》读书笔记之五:委托和事件

本篇已收录至<C#图解教程>读书笔记目录贴,点击访问该目录可获取更多内容. 一.委托初窥:一个拥有方法的对象 (1)本质:持有一个或多个方法的对象:委托和典型的对象不同,执行委托实际上是执行它所"持有"的方法.如果从C++的角度来理解委托,可以将其理解为一个类型安全的.面向对象的函数指针. (2)如何使用委托? ①声明委托类型(delegate关键字) ②使用该委托类型声明一个委托变量 ③为委托类型增加方法 ④调用委托执行方法 (3)委托的恒定性: 组合委托.为委托+=增加

C# 委托,Lambda表达式,事件

本文章参考sikiC#高级篇,转载请注明出处. 什么是委托 如果我们要把方法当做参数来传递的话,就要用到委托.简单来说委托是一个类型,这个类型可以赋值一个方法的引用. 声明委托与使用 声明委托有四种方式.一种是原生的,另外三种是C#为了方便给我们封装好的. 四种声明方式分别为delegate, Action, Func, 在C#中使用一个类分为两个阶段,首先定义这个类,告诉编译器这个类由什么字段和方法组成,然后使用这个类实例化对象.在我们使用委托的时候,也需要经过这两个阶段,首先定义委托,告诉编

泛型委托当参数传递

假如有一个Person类: public class Person { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } public string Title { get; set; } } 执行一个方法: /// <summary> /// 传递一个泛型委托方法 /// </summary> /// <param name="acti

类库,委托,is和as运算符,泛型集合

类库:其实就是一堆类文件,只不过用户看不到这些类的源代码,保密性好. 优点:保密性好缺点:如果这个方法不好用,使用者无法自己去更改它. 类文件是.cs    类库是.dll 新建项目为类库,在debug文件夹下找到dll文件 委托:委托可以理解为:函数的指针 关键词:delegate 声明委托类型:public delegate int FirstDel(int a, int b); FirstDel不是类,是委托变量,不能实例化(不能new), 创建委托变量:FirstDel 名字 = 与这个

泛型委托

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 泛型委托 { public delegate int DelCompare<T>(T t1, T t2); // public delegate int DelCompare(object o1, object o2); class Progra

javascript中的事件委托

这几天看到一个面试题,大概就是,让你给1000个li都添加一个click事件,应该怎么添加?大多数人第一开始的感觉可能就是,每个li上边都添加一个呗,那要是这样的话,估计面试的时候就会GG了,这里就是撤出了我们的事件冒泡和捕获机制,以及事件委托机制,对于上边这些,我们慢慢来看. 首先说一下事件冒泡和事件捕获机制,事件冒泡是有微软公司提出来的,事件捕获是有网景公司提出来的,当时两家是争论的不可开交,后来w3c也没办法,就采取了折中的方式,事件产生后先捕获后冒泡, 通常,在js中监听事件的方法共有三

[JS]笔记14之事件委托

-->什么是事件委托-->事件委托原理-->事件委托优点-->事件源 / 目标源 一.什么是事件委托 通俗的讲,onclick,onmouseover,onmouseout等这些就是事件 委托,就是这个事件本来应该加在某些元素上的,而你却加到其他元素上来完成这个事件. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> &

事件委托能够优化js性能

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>面试题练习img居中</title> <style type="text/css"> img { /*display: table-cell; vertical-align: middle;*/ } html,body{ height: 100%; } div{ w

C#高级知识点概要(1) - 委托和事件

作者:linybo 要成为大牛,必然要有扎实的基本功,不然时间再长项目再多也很难有大的提升.本系列讲的C# 高级知识点,是非常值得去撑握的,不仅可以让你写代码时游刃有余,而且去研究和学习一些开源项目时,也不会显得那么吃力了. 希望大家记住,这里讲的所有的知识点,不仅仅是了解了就可以了,还要会灵活用,一定要多思考,撑握其中的编程思想. 本文讲的是委托和事件,这两个词可能你早就耳熟能详,但你是否真正撑握了呢? 本系列讲的C#高级知识点都是要求开发时能达到可以徒手写出来的水平(不依赖搜索引擎.找笔记等