文档章节

C#委托。

o
 osc_y8yehimr
发布于 2019/03/20 20:02
字数 374
阅读 9
收藏 0

精选30+云产品,助力企业轻松上云!>>>

什么是委托。

委托是一种数据类型。

委托的作用。

把变化的东西封装起来。

 

委托是引用变量,声明后不赋值为null   所以使用前校验非空。

class Program
    {
        static void Main(string[] args)
        {
            //2、使用委托。
            // 先new一个委托类型的对象,并传递方法进去。即md委托保存了M1方法。
            MyDelegate md = new MyDelegate(M1);
            //调用md委托就是调用M1方法
            md();
            
            
        }
        static void M1()
        {
            Console.WriteLine("一个没有参数没有返回值的方法");
        }
    }
    //1、定义委托类型
    //定义一个委托类型,用来保存无参数,无返回值的方法。
    public delegate void MyDelegate();

目前来看,委托没啥毛用,直接调用M1不就得了?

下面程序的作用是,传入一个字符串,把每个人名都加上*

class Program
    {
        static void Main(string[] args)
        {
            string[] name = new string[] { "Sam", "Jill", "Penny" };
            MyClass mc = new MyClass();
            mc.Change(name);
            for (int i = 0; i < name.Length; i++)
            {
                Console.WriteLine(name[i]);
            }
        }
    }
    public class MyClass
    {
      public void Change(string[] str)
        {
            for (int i = 0; i < str.Length; i++)
            {
                str[i] = "*" + str[i] + "*";
            }
        }
    }
    

但是现在需求变了,把每个人名都换成大写。  就需要改变代码。

而代码部分,只有str[i] = "*" + str[i] + "*";  是变化的。

就可以把这段代码封装起来。

 

class Program
    {
        static void Main(string[] args)
        {
            string[] name = new string[] { "Sam", "Jill", "Penny" };
            MyClass mc = new MyClass();
            mc.Change(name,ChangeValue);
            for (int i = 0; i < name.Length; i++)
            {
                Console.WriteLine(name[i]);
            }
        }
        static string ChangeValue(string str)
        {
            return str.ToUpper();
        }
       
    }
    public class MyClass
    {
      public void Change(string[] str,ChangeDelegate ChangeValue)
        {
            for (int i = 0; i < str.Length; i++)
            {
                str[i] = ChangeValue(str[i]);
            }
        }
    }
    public delegate string ChangeDelegate(string str);

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
C#2.0新增功能06 协变和逆变

系列目录 【已更新最新开发文章,点击查看详细】 在 C# 中,协变和逆变能够实现数组类型、委托类型和泛型类型参数的隐式引用转换。 协变保留分配兼容性,逆变则与之相反。 以下代码演示分配兼...

osc_pocs16xx
2019/07/10
11
0
收藏:C#

CSDN =================================================== Visual Studio 2008简体中文试用版(90天)变成永久正式版的两种方法 Visual Studio 最常用的13个快捷键 .net反编译工具 ========...

钱途无梁
2009/05/30
0
0
C# Delegate

Delegate 委托的类图: 引用某网友的一句话: 个人觉得比较贴切,比较好理解 委托说白了就是为了解耦代码结构,使代码有脉络可循,而不是一团乱麻。留下一个线索(就是某个委托),在别处实现具...

taadis
2018/11/03
0
0
Unity3D学习笔记(三十二):Xlua(2)

Xlua支持通过子类对象访问父类的变量属性和方法 对于C#的ref,out参数的方法 当调用的时候:out类型的参数是不需要传递实参的,普通的参数和ref参数需要传递实参。 out,ref传出值通过lua函数...

osc_pb5yyzq7
2019/02/12
8
0
C# 基础知识系列- 11 委托和事件

前言 事件和委托是C#中的高级特性,也是C#中很有意思的一部分。出现事件的地方,必然有委托出现;而委托则不一定会有事件出现。那为什么会出现这样的关系呢?这就需要从事件和委托的定义出发...

月影南溪
05/23
7
0

没有更多内容

加载失败,请刷新页面

加载更多

JIT的Profile神器JITWatch

点击上方的蓝字关注我吧 程序那些事 简介 老是使用命令行工具在现代化社会好像已经跟不上节奏了,尤其是在做JIT分析时,使用LogCompilation输出的日志实在是太大了,让人望而生畏。有没有什么...

flydean
07/04
0
0
运维基础--虚拟机的使用(一)

虚拟机的使用 开始使用Linux操作系统时,首先可能会接触到两个主要的界面:GUI和CLI,即图形界面个命令界面,而运维一般极少使用到图形界面。 一、命令提示符的格式:[root@mylab11~] # roo...

osc_9os5791s
20分钟前
25
0
以程序员的方式,尽绵薄之力

作为程序员,我们不能冲在第一线,参与病毒防疫工作,我们希望通过我们的方式,让更多的人获取到关于疫情的有用的消息,正确的消息 虽然github可能是个相对小众的平台,对于非程序员来说,可...

Jipson
01/26
17
0
Oracle 等待事件之 db file scattered read

db file scattered read 官网解释: This event signifies that the user process is reading buffers into the SGA buffer cache and is waiting for a physical I/O call to return. A db......

osc_qlj7m2h9
21分钟前
19
0
互联网+时代的畅想

封面的台风卫星照片,我认为很形象地可以看作互联网的那一波浪潮。在智能手机普及的初始阶段,还记得我们对于互联网的狂热,有人说要用互联网颠覆一切,亦有人要用互联网干一切事情,当然,这...

zd200572
2015/09/02
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部