C#委托 您所在的位置:网站首页 带返回值的委托 C#委托

C#委托

2024-06-16 22:59| 来源: 网络整理| 查看: 265

一、调用带引用参数的委托

二、调用带值参数返回值的委托

三、总结

C#中方法的参数有值参数、引用参数类型、输出参数等类型,下面我们直接上代码,看懂调用带引用参数的委托和调用带值参数的委托。

一、调用带引用参数的委托

如果委托有引用参数,参数值会根据调用列表中的一个或多个方法的返回值而改变,在调用委托列表中的下一个方法时,参数的新值(不是初始值)回传给下一个方法。

/* 时间:2018年11月14日13点44分 目的:调用带引用参数的委托 */ using System; delegate void Mydel(ref int x); class Myclass { public void Add2(ref int x) //这里它会改变参数x的值 { x += 2; } public void Add3(ref int x) //这里也会改变参数x的值 { x += 3; } static void Main() { Myclass myclass = new Myclass(); Mydel mydel = myclass.Add2; mydel += myclass.Add3; mydel += myclass.Add2; int x = 5; mydel(ref x); Console.WriteLine("{0}", x); Console.ReadKey(); } } /* 程序运行结果 -------------------------------- 12 -------------------------------- */ 二、调用带值参数返回值的委托

调用这种值类型的委托,调用列表的最后一个方法返回的值就是委托调用返回的值,调用列表中所有其他方法的返回值都会被忽略。

/* 时间:2018年11月14日13点51分 目的:调用带值类型返回值参数的委托 */ using System; delegate int Mydel(int x); class Myclass { public int Add2(int x) { return x += 2; } public int Add3(int x) { return x += 3; } static void Main() { Myclass myclass = new Myclass(); Mydel mydel = myclass.Add2; mydel += myclass.Add3; mydel += myclass.Add2; int x = 5; Console.WriteLine("{0}", mydel(x)); //输出结果是7,返回值是方法列表最后一个方法的返回值 Console.WriteLine("{0}", x); Console.ReadKey(); } } /* 程序运行结果 -------------------------------- 7 5 -------------------------------- */

下面还有一个例子和前面这个例子对比。

/* 时间:2019年1月19日11点40分 目的:调用带值类型返回值参数的委托(对象内变量变化了) */ using System; delegate int Mydel(); class Myclass { public int x = 5; public int Add2() { x += 2; return x; } public int Add3() { x += 3; return x; } static void Main() { Myclass myclass = new Myclass(); Mydel mydel = myclass.Add2; mydel += myclass.Add3; mydel += myclass.Add2; Console.WriteLine("{0}", mydel()); //输出结果是12,也是方法列表最后一个的返回值,但是由于这里对象内的自己的变量会随着委托内函数的执行变化,因此这里也是12 Console.WriteLine("{0}", myclass.x); //输出结果是12 Console.ReadKey(); } } /* 程序运行结果 -------------------------------- 12 12 -------------------------------- */

 

 

三、总结

如果前面了解过带值参数的方法和带引用参数的方法,理解起来会简单许多。委托执行一系列函数方法,两种情况如下:

1. 在值参数中,我们知道,无论在函数里对值参数进行了什么操作,在是在栈中赋值值参数进行操作,都不会改变值参数的值,因此在值参数中第一种情况下,每个函数都是使用最初的参数值,委托返回最后一个函数的返回值,所以结果是7。

2. 在引用参数中,我们知道,函数方法内部会改变方法引用类型参数的值,因此上一个方法改变了参数的值,这个参数就会有一个新值(肯定不是初始值),而下一个方法会使用这个新值。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有