C#基础学习——委托

using System;

namespace Test
{
    public delegate void TryDelegate(string name);

    public class SayHello{

      public void SpeakChinese(string name){
        Console.WriteLine("你好,"+name);
      }

      public void SpeakEnglish(string name){
        Console.WriteLine("Hello,"+name);
      }

      public void Speak(string name,TryDelegate ChoseLanguage){
        ChoseLanguage(name);
      }
    }

    class Program{
      static void Main(string[] args){
        SayHello sh=new SayHello();
        sh.Speak("小明",sh.SpeakChinese);
        sh.Speak("Fanun",sh.SpeakEnglish);
        Console.ReadLine();
      }
    }
}

结果:

委托是一种特殊的对象类型,它定义了方法的类型,使得可以将方法当作另一个方法参数来进行传递,其特殊之处在于,我们以前定义的所有对象都包含数据,而委托包含的只是方法的地址。这种方法动态的付给参数的做法,可以避免在程序中大量的使用if...else,switch语句,同时使程序具有更好的扩展性。

委托的多播委托

class Program{
      static void Main(string[] args){
        SayHello sh=new SayHello();
        //sh.Speak("小明",sh.SpeakChinese);
        //sh.Speak("Fanun",sh.SpeakEnglish);
        TryDelegate try1=sh.SpeakChinese;
        TryDelegate try2=sh.SpeakEnglish;
        sh.Speak("小明",try1);
        sh.Speak("Fanun",try2);
        Console.ReadLine();
      }
    }

显示的结果与上面的一致。

还有,委托不同于string的一个特性:它可以将多个方法付给同一个委托,或者将多个方法绑定到同一个委托。

class Program{
      static void Main(string[] args){
        SayHello sh=new SayHello();
        //sh.Speak("小明",sh.SpeakChinese);
        //sh.Speak("Fanun",sh.SpeakEnglish);
        TryDelegate try1=sh.SpeakChinese;
        try1+=sh.SpeakEnglish;
        sh.Speak("小明",try1);
        Console.ReadLine();
      }
    }

结果:

你好,小明

Hello,小明

时间: 2024-08-06 20:05:20

C#基础学习——委托的相关文章

c#委托的理解和基础学习

 C#委托的理解和基础学习 Delegate,委托,是c#中非常重要的一个概念,使用委托使程序员可以将方法引用封装在委托对象内.然后可以将该委托对象传递给可调用所引用方法的代码,而不必在编译时知道将调用哪个方法.与C或C++中的函数指针不同,委托是面向对象,而且是类型安全的.用最通俗易懂的话来讲,你就可以把委托看成是用来执行方法(函数)的一个东西.在使用委托的时候,你可以像对待一个类一样对待它.即先声明,再实例化.只是有点不同,类在实例化之后叫对象或实例,但委托在实例化后仍叫委托. 比如:

[.net 面向对象编程基础] (21) 委托

[.net 面向对象编程基础] (20)  委托 上节在讲到LINQ的匿名方法中说到了委托,不过比较简单,没了解清楚没关系,这节中会详细说明委托. 1.什么是委托? 学习委托,我想说,学会了就感觉简单的不能再简单了,没学过或都不愿了解的人,看着就头大,其实很简单.委托在.net面向对象编程和学习设计模式中非常重要,是学习.net面向对象编程必须要学会并掌握的. 委托从字面上理解,就是把做一些事情交给别人来帮忙完成.在C#中也可以这样理解,委托就是动态调用方法.这样说明,就很好理解了. 平时我们会

.NET基础学习 (1)

      “书到用时方恨少”,对于许多的现在人来说确实是这样的,我自己也是这样,上学的时候没学好,现在出来工作了时在学那时没去认真学是一件错误的事情.但是时光不能逆流,错过了就错过了,我们不能沉寂在过去,我们要向前看去,既然那是没学好,工作了要靠它去维持生计,我们只好边工作边学习了,下面是我自己在学习是的一些笔记,写的不好希望各位指出来,邮箱[email protected]. 一.委托的一种        匿名方法其实就是委托: 对2数实现加减乘除,其中一个解决方案就是通过委托来实现的. 上

蓝鸥零基础学习HTML5—html+css基础

蓝鸥零基础学习HTML5-html+css基础 一.课程目标 1.了解前端开发职位:2.掌握常用标签以及语义及用法:3.掌握常用css的特性,掌握基础布局技巧:4.掌握整站规划概念. 二.适用人群 零基础积极学习html5者 三.课程简介 本课程主要讲解了 html+css的基础知识,包括html模板.标签.css基础样式.布局.表格表单.整站等等,是进行前端开发的基础.Html+css是前端开发的基础,大部分前端开发工程都需要从html+css布局开始,html+css的基础非常重要,是前端开

HTML&CSS基础学习笔记8-预格式文本

<pre>标签的主要作用是预格式化文本.被包围在 pre 标签中的文本通常会保留空格和换行符.而文本也会呈现为等宽字体. <pre>标签的一个常见应用就是用来表示计算机的源代码.当然你也可以在你需要在网页中预显示格式时使用它. 会使你的文本换行的标签(例如<h>.<p>)绝不能包含在 <pre> 所定义的块里.尽管有些浏览器会把段落结束标签解释为简单地换行,但是这种行为在所有浏览器上并不都是一样的. 更多学习内容,就在码芽网http://www.

Objc基础学习记录5

NSMutableString类继承的NSString类. NSMutableString是动态的字符串. 1.appendingString 方式: 向字符串尾部添加一个字符串. 2.appendingFormat:可以添加多个类型的字符串. int,chat float,double等 3.stringWithString 创建字符串, 4.rangeOfString 返回str1在另一个字符串中的位置. 5.NSMakeRange(0,3) 字符串0位到3位. 6.deleteCharac

Linux新手入门书籍推荐 鸟哥的linux私房菜-基础学习篇

这本书写的不错.赞~\(≧▽≦)/~ 2017-02-24 下午,我开始在Linux下写第一个.c程序,在终端打印hello world.gcc 源代码文件之后,输出可执行文件,但是 当我输入文件名执行它的时候,却提示我 无法找到命令.于是我找百度,查资料,花了半个小时,终于找到解决方法了, 输入"./filename"即可.... 2017-02-25 我看<基础学习篇>这本书,在P158页下面的例题讲解中找到了昨天下午异常的解析.我就很是感慨,心想:要是早看这本书,半个

Java基础学习——数组初识(1)

Java基础学习--数组初识(1) 1什么是数组 Java中常见的一种数据结构就是数组,数组可以分为一维数组.二维数组和多维数组. 数组是由一组相同的变量组成的数据类型,数组中每个元素具有相同的数据类型,数组中的每个元素都可以用一个统一的数组名和下标来确定. 2 数组的使用 数组的一般使用步骤: 声明数组 分配内存给该数组 下面是一维数组为例: 数据类型  数组名 []: 数组名 = new 数据类型 [数据个数]: 2.1一维数组的声明与赋值 1.数组的声明 int  num [];    

零基础学习 Hadoop 如何下手

想学习hadoop,可是苦于自己没有任何的基础,不知道该如何下手,也不知道自己能不能学会.其实零基础学习hadoop,没有想象的那么困难.曾经我也是一位小白,刚接触到云计算,想过培训,但是培训机构的选择也让我很纠结,就自己开始去摸索学习,现在我把自己的学习思路整理一下,希望对大家有帮助. 首先整体说一下学习过程给大家借鉴: 一.了解hadoop: 这里不具体阐述概念,有兴趣的同学可以自己上网去查.我们知道hadoop,有单机安装,伪分布安装和分布安装.同时hadoop的环境是Linux,所以我们