文档章节

C#中的参数传递

清山博客
 清山博客
发布于 2016/07/15 20:03
字数 669
阅读 5
收藏 0

 方法的参数传递机制:
  1.值参数 (Value Parameter)
   方法名称 ( 参数类型 参数名称[,参数类型 参数名称] )
  2.引用参数 (Reference Paramter)
   方法名称 ( ref 参数类型 参数名称 [,ref 参数类型 参数名称] ) 
  3.输出参数 (Out Paramter) 
   方法名称 ( out 参数类型 参数名称[,out 参数类型 参数名称] )

输出参数和引用参数的区别:

   从CLR的角度看,关键字out和关键字ref是等效的,也就是说,无论使用哪个关键字,都会生成相同的元数据和IL代码.但是C#编译器将两个关键字区别对待,在c#中,这两个关键字的区别在于哪个方法负责初始化引用对象.
 
   <1>若是使用的out关键字,那么调用者不希望在调用方法之前初始化对象,被调用的方法不能读取对象的值,而且被调用的方法必须在返回之前为对象赋值.
   <2>若是使用的ref关键字,那么调用者必须在调用方法之前首先初始化参数的值,被调用的方法可以读取参数或为参数赋值.

例:

1.值参数、引用参数、输出参数的方法调用:
<textarea cols="89" rows="15" name="code" class="c-sharp:nogutter">using System; class Methord { public static void ValueMethord(int i) //值参数的调用 { i++; } public static void ReferenceMethord(ref int i) //引用参数的调用 { i++; } public static void OutMethord(out int i) //输出参数的调用 { i=0; //注意:必须将局部变量i初始化 i++; } static void Main() { int i=0; ValueMethord(i); Console.WriteLine("i="+i); int j=0; //注意:必须在此将局部变量j初始化,而不是在引用参数的调用时 ReferenceMethord(ref j); Console.WriteLine("j="+j); int k=0; OutMethord(out k); Console.WriteLine("k="+k); } }</textarea>

2.向方法传递可变数量的参数:使用params关键字
<textarea cols="89" rows="15" name="code" class="c-sharp:nogutter">using System; class Methord { static int addi(params int[] valuse) //注意:params关键字后面必须是接一个数组型变量 { int sum=0; foreach(int i in valuse) //遍历数组中的每一个元素,然后求出其和的值 sum+=i; return sum; } static void Main() { Console.WriteLine (addi(1,2,3)); } } </textarea>

 3.对比值类型和引用类型:

                              值类型                             引用类型
 
 变量中存放的       真正的数据                       指向数据的引用指针
  
 内存空间分配       堆栈(Stack)                      托管堆(Managed Heap)

 内存需求            一般较小                             较大

 执行效能              较快                               较慢
 
 内存释放时间点    执行超过定义变量的作用域          由回收站负责回收

 可以为null         不可以为null                          可以为null

本文转载自:http://blog.csdn.net/a497785609/article/details/4564287

清山博客
粉丝 3
博文 142
码字总数 30397
作品 0
广州
私信 提问
out 参数修饰符(C# 参考)

Visual Studio 2013 其他版本 out 关键字会导致参数通过引用来传递。 这与 ref 关键字类似,不同之处在于 ref 要求变量必须在传递之前进行初始化。 若要使用 out 参数,方法定义和调用方法都...

石磐
2015/04/22
0
0
JAVA值传递or引用传递

经常会有学员讨论JAVA语言究竟是值传递还是引用传递的问题。这里我想对这个问题阐述一下我个人的观点。很多关于JAVA参数传递方式的论述都会去对比参照C/C++或C#,故而我也会对C/C++或C#的参数...

海同网校
2015/04/20
95
0
Metro C#中调用C++中的DLL

g10589119在【windows8开发】深入浅出C++/CX一文中提出了一下这个问题,特以此文进行回复,大家如果有不同意见和想法可以留言分享下。g10589119的问题如下: ------------------------------...

zting科技
2017/10/19
0
0
c#基础系列3---深入理解ref 和out

“大菜”:源于自己刚踏入猿途混沌时起,自我感觉不是一般的菜,因而得名“大菜”,于自身共勉。 扩展阅读 c#基础系列1---深入理解 值类型和引用类型 c#基础系列2---深入理解 String 在上篇文...

大菜
2018/09/15
0
0
C# ref和out关键字

ref和out关键字初解 参数可以通过引用和值传递给方法。通过引用传递给方法的变量可以有调用它的方法作自由改变,所作的修改会影响原来的变量的值;在C#中,除非特别说明,所有的参数都是值传...

晨曦之光
2012/03/09
112
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周二乱弹 —— 吾不好梦中插人

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @鱼豆腐233 :#今日歌曲分享# 分享My Chemical Romance的单曲《I Don't Love You》: 《I Don't Love You》- My Chemical Romance 手机党少年们...

小小编辑
58分钟前
58
5
ss5 vpn 安装(linux版本)

1. 创建一个文件夹 /ss5 你也可以自定义,不过后续的地方需要注意自己的地址 2. 下载ss5文件(如果你的服务器没有安装wget请使用 yum -y install wget 命令安装 如果连yum都没安装自己查去)(下...

太黑_thj
今天
2
0
八、RabbitMQ的集群原理

集群架构 写在前面 RabbitMQ集群是按照低延迟环境设计的,千万不要跨越WAN或者互联网来搭建RabbitMQ集群。如果一定要在高延迟环境下使用RabbitMQ集群,可以参考使用Shovel和Federation工具。...

XuePeng77
今天
5
0
mac系统下,brew 安装mysql,用终端可以连接,navicat却连接不上?

问题: 1.报错? 2059 - Authentication plugin 'caching_sha2_password' cannot be loaded: dlopen(../Frameworks/caching_sha2_password.so, 2): image not found 2.自己通过设置,已经把密......

写bug的攻城狮
昨天
3
0
老生常谈,HashMap的死循环

问题 最近的几次面试中,我都问了是否了解HashMap在并发使用时可能发生死循环,导致cpu100%,结果让我很意外,都表示不知道有这样的问题,让我意外的是面试者的工作年限都不短。 由于HashMap...

群星纪元
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部