c#的参数传递有三种方式:
值传递,和c一样,
引用传递,类似与c++,但形式不一样
输出参数,这种方式可以返回多个值,这种有点像c中的指针传递,但其实不太一样。
值传递不细说,c中已经很详细了
引用传递实例如下:需要使用ref关键字

  1. using System;
  2. namespace CalculatorApplication
  3. {
  4. class NumberManipulator
  5. {
  6. //引用传递必须使用ref
  7. public void swap(ref int x, ref int y)
  8. {
  9. int temp;
  10.  
  11. temp = x; /* 保存 x 的值 */
  12. x = y; /* 把 y 赋值给 x */
  13. y = temp; /* 把 temp 赋值给 y */
  14. }
  15.  
  16. static void Main(string[] args)
  17. {
  18. NumberManipulator n = new NumberManipulator();
  19. /* 局部变量定义 */
  20. int a = 100;
  21. int b = 200;
  22.  
  23. Console.WriteLine("在交换之前,a 的值: {0}", a);
  24. Console.WriteLine("在交换之前,b 的值: {0}", b);
  25.  
  26. /* 调用函数来交换值 */
  27. n.swap(ref a, ref b);
  28.  
  29. Console.WriteLine("在交换之后,a 的值: {0}", a);
  30. Console.WriteLine("在交换之后,b 的值: {0}", b);
  31.  
  32. Console.ReadLine();
  33.  
  34. }
  35. }
  36. }

按输出传递参数
return 语句可用于只从函数中返回一个值。但是,可以使用 输出参数 来从函数中返回两个值。输出参数会把方法输出的数据赋给自己,其他方面与引用参数相似。
使用关键字out。
下面的实例演示了这点:

  1. using System;
  2.  
  3. namespace CalculatorApplication
  4. {
  5. class NumberManipulator
  6. {
  7. //使用out可以吧x的值重新复制给x,相当于更新
  8. public void getValue(out int x )
  9. {
  10. int temp = 5;
  11. x = temp;
  12. }
  13.  
  14. static void Main(string[] args)
  15. {
  16. NumberManipulator n = new NumberManipulator();
  17. /* 局部变量定义 */
  18. int a = 100;
  19.  
  20. Console.WriteLine("在方法调用之前,a 的值: {0}", a);
  21.  
  22. /* 调用函数来获取值 */
  23. n.getValue(out a);
  24.  
  25. Console.WriteLine("在方法调用之后,a 的值: {0}", a);
  26. Console.ReadLine();
  27.  
  28. }
  29. }
  30. }

  有out之后,a的值就变成了5。

两个参数的实例:

  1. using System;
  2.  
  3. namespace CalculatorApplication
  4. {
  5. class NumberManipulator
  6. {
  7. //使用out可以吧x的值重新复制给x,相当于更新
  8. public void getValue(out int x, out int y)
  9. {
  10. int temp = 5;
  11. x = temp;
  12.  
  13. y = x;
  14. }
  15.  
  16. static void Main(string[] args)
  17. {
  18. NumberManipulator n = new NumberManipulator();
  19. /* 局部变量定义 */
  20. int a = 100;
  21. int b = 20;
  22.  
  23. Console.WriteLine("在方法调用之前,a 的值: {0}, b的值:{1}", a, b);
  24.  
  25. /* 调用函数来获取值 */
  26. n.getValue(out a, out b);
  27.  
  28. Console.WriteLine("在方法调用之前,a 的值: {0}, b的值:{1}", a, b);
  29. Console.ReadLine();
  30.  
  31. }
  32. }
  33. }

  再说一点就是,vs的ide功能,的确是很强大的,很多语法提示都有。

下面还有一个用处:

  1. 提供给输出参数的变量不需要赋值。当需要从一个参数没有指定初始值的方法中返回值时,输出参数特别有用。请看下面的实例,来理解这一点:
  1. using System;
  2.  
  3. namespace CalculatorApplication
  4. {
  5. class NumberManipulator
  6. {
  7. //提供给输出参数的变量不需要赋值。当需要从一个参数没有指定初始值的方法中返回值时,输出参数特别有用。请看下面的实例,来理解这一点:
  8. public void getValues(out int x, out int y)
  9. {
  10. Console.WriteLine("请输入第一个值: ");
  11. x = Convert.ToInt32(Console.ReadLine());
  12. Console.WriteLine("请输入第二个值: ");
  13. y = Convert.ToInt32(Console.ReadLine());
  14. }
  15.  
  16. static void Main(string[] args)
  17. {
  18. NumberManipulator n = new NumberManipulator();
  19. /* 局部变量定义 */
  20. int a, b;
  21.  
  22. /* 调用函数来获取值 */
  23. n.getValues(out a, out b);
  24.  
  25. Console.WriteLine("在方法调用之后,a 的值: {0}", a);
  26. Console.WriteLine("在方法调用之后,b 的值: {0}", b);
  27. Console.ReadLine();
  28. }
  29. }
  30. }

  

c#的参数调用的更多相关文章

  1. Atitit main函数的ast分析  数组参数调用的ast astview解析

    Atitit main函数的ast分析  数组参数调用的ast astview解析 1.1. Xxcls.main(new String[]{"","bb"}) ...

  2. PHP通过传递对象参数调用asp.net Webservice 服务

    asp.net 测试服务 ProcessRequest.asmx文件代码  public class ProcessRequest : System.Web.Services.WebService   ...

  3. JavaScript函数定义 ,参数调用

    一.JavaScript函数函数: 函数就是一种封装,由事件驱动的或者当它被调用时执行的可重复使用的代码块.定义函数:function 函数名(){函数体;}数不会自动执行,需要被调用才可以执行函数名 ...

  4. Scala 按名称参数调用函数 与 =>的用法

    转自:http://blog.csdn.net/shenxiaoming77/article/details/54835679 通常情况下,函数的参数是传值参数:即参数的值在它被传递给函数之前被确定. ...

  5. 可以使用可用的服务和参数调用在“eWorld.WCFImplement.ServiceImplement.ImageArchiveService”类型上使用“Autofac.Core.Activators.Reflection.DefaultConstructorFinder”找到的构造函数: 无法解析参数'eWorld.WCFBLL.ImageArchive.IDocumentOperation

    可以使用可用的服务和参数调用在“eWorld.WCFImplement.ServiceImplement.ImageArchiveService”类型上使用“Autofac.Core.Activato ...

  6. python定义函数时的参数&调用函数时的传参

    一.定义函数: 1.位置参数:直接定义参数 2.默认参数(或者关键字参数):参数名 = "默认值" 3.位置参数必须在默认参数之前 二.调用函数: 1.按位置传,直接写参数的值 2 ...

  7. 使用“1”个参数调用“DownloadString”时发生异常:“操作超时”

    我今天在终端美化时间遇到一个问题是这样的 使用“1”个参数调用“DownloadString”时发生异常:“操作超时” 然后网我看了下,访问链接属于https的东西,根据直觉我觉得是这样的,是由于访问 ...

  8. 使用“2”个参数调用“SetData”时发生异常:“程序集“

    使用"2"个参数调用"SetData"时发生异常:"程序集"Microsoft.VisualStudio.ProjectSystem.VS. ...

  9. 不封装ajax 带url参数调用接口

    html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...

  10. [Effective JavaScript 笔记]第21条:使用apply方法通过不同数量的参数调用函数

    apply()方法定义 函数的apply()方法和call方法作用相同,区别在于接收的参数的方式不同.apply()方法接收两个参数,一个是对象,一个是参数数组. apply()作用 1.用于延长函数 ...

随机推荐

  1. PHP匹配中文,匹配车牌号

    /** * 车牌号 * 字母全部大写 * @param $str * @return string */ public static function checkCar($str) { $patter ...

  2. Tomcat:Commons Daemon procrun stdout initialized

    1.问题查询 更换了Tomcat版本后服务器无法启动,看日志出现了Commons Daemon procrun stdout initialized错误,一开始以为是环境变量的配置问题,但是仔细检查后 ...

  3. MyBatis参数条件查询传入的值为0时的判断

    MyBatis条件查询对字段判断是否为空一般为: <if test="testValue!=null and testValue != ''"> and test_va ...

  4. 用C#做一个 拉流播放器

    做拉流播放器第一个想到就是,.,..FFmpeg没错 我也是用强大的他它来做的.但是我用的不是  cmd 调用 而是用的强大的FFmpeg.AutoGen FFmpeg.AutoGen 这个是C# 一 ...

  5. .Net MVC如何渲染带有网页标签的字符串

    有时候我们在解析一段文字时,可能文字中会包含网页上的标签,如div.p等等.那么如果将这种文字渲染成对应的标签效果呢?如图,最近博主就拿到了这么一段字符串(如图) 由于中间带有很多特殊字符,用Html ...

  6. TCP,UDP 通讯的helper类

    使用Tcp通讯,首先要启动tcp服务端监听客户端,客户端发送消息,服务端收到消息 1.服务端代码如下 public class TcpServerTest { public async Task Be ...

  7. np.newaxis的使用及有趣的数组相乘

    a=np.array([1,2,3,4])a=a[np.newaxis,:] #固定行,相当于1行多列b=np.array([2,4,6]) b=b[:,np.newaxis] #固定列,相当与多行1 ...

  8. react 实现评分组件

    写了个评分组件,效果如下 组件Rate.js import React, { Component } from 'react' import './Rate.less' export default ...

  9. JAVA基础之JavaEE与MVC

    所谓的架构.模式都是方便开发和查看的,分工明确的,理解每层的具体的意义! 一.JavaEE: 1.Java EE,Java 平台企业版(Java Platform Enterprise Edition ...

  10. 自旋锁spin_lock、spin_lock_irq 和 spin_lock_irqsave

    自旋锁和互斥锁的区别是,自旋锁不会引起睡眠,所以可用于不能休眠的代码中(如IRQ) 自旋锁保持期间抢占失效,而信号量保持期间可以被抢占 定义 spinlock_t lock; init #define ...