.net中用Action等委托向外传递参数

原文:.net中用Action等委托向外传递参数

     一般我们可以使用ref,out达到向外传递参数目的。 Action<T>是一个特殊的委托,除了常规应用。我们还可以用它来实现简单地向外传递参数。直接看下面的UnitTest代码:

   1: [TestMethod]
   2: public void PassOutParametersUsingDelegate()
   3: {
   4:     int i = 0;
   5:     string messgae = string.Empty;
   6:     int? addedNumber = 1;
   7:  
   8:     //It is pass parameter by Action<T1,T2>
   9:     Foo1((a, b) =>
  10:     {
  11:         i = a;
  12:         messgae = b;
  13:     });
  14:  
  15:     //It is pass parameter by Func<T1,T2,TResult>
  16:     Foo2((a, b) =>
  17:     {
  18:         i = a;
  19:         messgae = b;
  20:         return addedNumber;
  21:     });
  22:  
  23:     Foo2((a, b) =>
  24:     {
  25:         return a+100;
  26:     });
  27:  
  28:     Assert.AreEqual("i=15,message=fifteen", string.Format("i={0},message={1}", i, messgae));
  29:  
  30:  
  31: }
  32:  
  33: private void Foo1(Action<int, string> action)
  34: {
  35:     int number = 15;
  36:     string msg = "fifteen";
  37:  
  38:     action(number, msg);
  39: }
  40:  
  41: private void Foo2(Func<int, string, int?> func)
  42: {
  43:     int number = 15;
  44:     string msg = "fifteen";
  45:  
  46:     int? tempInt = func(number, msg);
  47: } 

上面的代码我们演示使用Action<T>, 有注意到我们把a,b两个值传递给方法外面的变量。同样的,我们用Func<TResult>可以实现。为什么会有这样的代码产生呢?源于这样的场景,有一个方法只有一个输入参数,返回void 。我们为了不改变原来这个方法参数签名,增加新的子方法,使用Action<T>向外传递参数。然后再用原方法Wrap新的子方法。

    关于Action<T>还有很多精彩的运用,Builder模式与Fluent接口

    希望对您开发有帮助。

作者:Petter Liu

出处:http://www.cnblogs.com/wintersun/

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

该文章也同时发布在我的独立博客中-Petter Liu Blog

.net中用Action等委托向外传递参数

时间: 2024-10-11 04:44:08

.net中用Action等委托向外传递参数的相关文章

Oracle BIEE 向外传递参数的实现方式

Oracle BIEE 可以通过叙述视图对外传递参数,以实现通过提示控制嵌入页面内容的效果. ① 首先,构建需要传递参数的请求条件(Answer). ② 选择叙述视图,插入相应HTML代码段,例如:<iframe> ③ 通过URL对外传递参数,参数的格式如下: 1 /web/nxflaw/flawAnalysis.do?action=homePage&[email protected]&[email protected]&[email protected]&[e

JSP页面间传递参数的5种方法

JSP页面间传递参数是经常需要使用到的功能,有时还需要多个JSP页面间传递参数.下面介绍一下实现的方法. (1)直接在URL请求后添加 如:< a href="thexuan.jsp?action=transparams&detail=directe">直接传递参数< /a> 特别的在使用response.sendRedirect做页面转向的时候,也可以用如下代码: response.sendRedirect("thexuan.jsp?acti

struts2的action与jsp之间传递参数

1.浏览器往Action传递参数: 在Action中设置属性,并为属性设置get/set方法.传递参数时按照属性的名字赋值即可.如xxx?name=aa     取值用request.getPrameters("属性名“); public class UserAction { private String name; private User user; public String userAdd() { System.out.print(user.getName()); System.out.

winform总结2&gt; Action&lt;&gt; ,Action,func&lt;&gt;,委托相关的理解

1,他们是什么: Action 封装一个方法,该方法不具有参数并且不返回值. Action<> 封装一个方法,该方法具有最多16个参数并且不返回值. func<> 封装一个具有一个参数并返回 TResult 参数指定的类型值的方法.最多可以传递16个参数,并且可以有返回值,最后一个参数是返回值. 目前了解到的好像也只有委托是需要传递一个方法的,既然这里的三个方式都是封装一个方法,那么这种写法就肯定是可以用到给委托传递参数一类型的任务时用,想想刚开始学习委托的时候,要给他传递一个方法

Action&lt;T&gt; 委托使用详解

Action<T> 委托其实与[button url="http://redcat7.net/?p=343" style="dark"]Func<T, TResult> 委托[/button]一样,都是为了简化委托的使用,这两者的不同之处在于Action<T> 封装一个方法且该方法只有一个参数并且不返回值,而Func<T, TResult>封装一个具有一个参数并返回 TResult 参数指定的类型值的方法. 使用 Ac

QTP多个Action之间传递参数的方法详解

点击打开链接 脚本的朋友们都会碰到多个Action之间传递参数的问题,想当年我也是研究了好久才成功的,网上虽然有很多文章都在讲这个问题,但是大多都是雷同的抄来抄去不能解决实际问题,也有可能是我太笨了吧.下面我们来详细讲一下QTP多个Action之间传递参数的方法. 一.假设Action1调用Action2并且Action1传递参数给Action2 1.Action1的代码及设置 '定义两个变量 Dim strMessA:strMessA = "我是" Dim strMessB:strM

Func&lt;T&gt;与Action&lt;T&gt;委托泛型

Func<T>与Action<T>委托泛型介绍 .Net 3.5之后,微软推出了Func<T>与Action<T>泛型委托.进一步简化了委托的定义. Action<T>委托主要的表现形式如下: public delegate void Action(); public delegate void Action<T1>(T1 arg1); public delegate void Action<T1, T2>(T1 arg1

form中action属性后面?传递参数 获取不到

1 $p_id = $_REQUEST['p_id']; 2 3 echo "<h1>您将更新商品编号为<span>$p_id</span>的商品信息 <a href='listproduct.php'>查看所有</a></h1> 4 <form action='updateproduct.do.php?p_id=$p_id' method='get'> 5 商品名称:<input type='text'

Liferay7 BPM门户开发之40: Form表单的Action到Render的数据传递

在Form提交后的变量,很多情况是要展现在jsp页面中,这时Action到Render的变量传递就非常有用. 例如,您在数据库中添加了学生的详细信息. 为了实现这一需求,先创建Form表单(学生的细节,如姓名.出生日期等,通过action url来实现). 当用户提交表单时,这些数据(学生信息)会在你执行CRUD操作的action方法添加. 添加完成后,需要把一些信息展现到jsp页面. 和v6.2不同的是,action方法里不需要写类似这样的语句: actionResponse.setRende