`
镭风【CHN】
  • 浏览: 108967 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

C#中的输出参数ref和out

阅读更多
C#中的输出参数有两种:ref和out。
其实称他们为输出参数不是特别的准确,因为他们并不是像函数返回值一样“输出”一个值,而是将原先存在的值进行编辑。

举个例子(伪代码):

1、一般参数
int i = 1;
int j = 2;

int add(int i, int j)
{
   return i + j;
}

main
{
   print(add(i, j))
}


2、使用ref
int i = 1;
int j = 2;

void add(ref int i, ref int j)
{
   i = i + j;
}

main
{
   add(i, j);
   print(i);
}



两个函数都是用来计算两个值的和,不同的是一般参数传递进函数的是参数的拷贝值,
而ref和out直接修改内存中的数据。

对于值类型数据,ref和out相当于指针。
对于引用类型数据,就直接传递指向原数据的指针。


那么ref和out有什么区别呢?
区别在于对参数对象的初始化。
ref要求参数在传递之前进行初始化,而out要求在函数中对参数进行初始化,
所以,ref是个输入输出参数,而out是个输出参数。

2
0
分享到:
评论
2 楼 镭风【CHN】 2009-09-22  
我天天加班,没完没了的写啊!
1 楼 herod21 2009-09-20  
不错,我到新公司还没碰代码呢

相关推荐

    C#中ref和out参数使用时需要注意的问题

    此外我们还有其他向方法传递参数的形式,引用(ref)和输出(out)。  有时,我们需要改变原来变量中的值,这时,我们可以向方法传递变量的引用,而不是变量的值。引用是一个变量,他可以访问原来变量的值,修改引用...

    在一小时内学会 C#(txt版本)

    除了以下差异,C# 中的变量几乎和 C++ 中一样: 1. C# 中(不同于 C++)的变量,总是需要你在访问它们前先进行初始化,否则你将遇到编译时错误。故而,不可能访问未初始化的变量。 2. 你不能在 C# 中访问一个“挂起...

    C#5.0本质论第四版(因文件较大传的是百度网盘地址)

    4.5.3 输出参数(out) 118 4.5.4 参数数组 120 4.6 递归 122 4.7 方法重载 124 4.8 可选参数 126 4.9 用异常实现基本错误处理 129 4.9.1 捕捉错误 130 4.9.2 使用throw语句报告错误 136 ...

    C# 基础学习案例源码-2023(32套源码案例)适合初学者学习使用

    CS_12学习ref和out CS_13变长参数和参数默认值 CS_14函数重载 CS_15递归函数 CS_16结构体 CS_算法_冒泡排序 CS_算法_选择排序 CS核心_01类和对象 CS核心_02成员变量和访问修饰符 CS核心_03成员方法 CS核心_04封装_...

    C#中按引用传递与按值传递的区别,以及ref与out关键字的用法详解

    其和由输出参数传递;平均值由返回值返回。//在Main()方法中实现三个待求整数的输入及结果的输出//目的:定义方法;调用方法;;理解形参和实参的引用传递关系;熟悉引用参数和输出参数的使用。using System;class ...

    C#本质论(第3版)

    5.6.8 属性和方法调用不允许作为ref或out参数值使用 5.7 构造器 5.7.1 构造器的声明 5.7.2 默认构造器 5.7.3 对象初始化器 5.7.4 构造器的重载 5.7.5 使用this调用另一个构造器 5.8 静态成员 5.8.1 静态...

    轻松学C#(图解版)

    4.4.3 输出参数(out参数) 61 4.5 特殊的方法 62 4.5.1 Main()方法 62 4.5.2 构造函数 62 4.5.3 带参数的构造函数 63 4.5.4 析构函数 64 4.6 小结 65 4.7 习题 65 第5章 流程控制 69 5.1 选择执行——条件 70 ...

    c#学习笔记.txt

    如果没有ref,out则默认为值传递,虽然可以在方法中修改这个参数的值,但是修改后的值不会还会到调用该方法的程序中. params :params 关键字可以指定在参数数目可变处采用参数的方法参数 ref :引用传递 out : 7, ...

    c# 加密和解密相关代码

    在第一个GroupBox 中放入3 个TextBox 控件和一个Button 按钮,分别用于输入数字、输入加密数字、显示加 密后的数字和计算加密信息;在第二个GroupBox 中放入一个TextBox 控件和一个Button 按钮,分别用于显示 解密后...

    ReflectionDemo.rar

    C#的反射System.Reflection正对应于C#的整体代码结构: 命名空间Namespace一般与程序集Assembly名称一致。 一个程序集Assembly由多...方法的参数Parameter有类型,参数名,默认值,是否引用参数ref,是否输出参数out

    C#难点逐个击破(2):out返回参数

    out为输出返回传递,与ref相同之处较多,其重要区别是在上一节讲到的ref在被引用方法中必须被初始化;out在被引用方法中一定要有返回值。 代码如下: using System; /****************************** * Chapter:C#...

    C# for CSDN 乱七八糟的看不懂

    C#关键字 关键字 abstract as base bool break byte case catch char checked class const continue decimal default delegate do double else enum event explicit extern false finally fixed float for foreach ...

    C#与.NET技术平台实战演练.part1

    initializer10-5初始化只读数据10-6在构造器中使用out与ref10-7struct构造器10-7-1struct构造器的限制10-8static构造器10-8-1使用static构造器初始化静态成员10-8-2static构造器的限制10-9对象与内存10-9-l对象的...

    C#与.NET技术平台实战演练.part2

    initializer10-5初始化只读数据10-6在构造器中使用out与ref10-7struct构造器10-7-1struct构造器的限制10-8static构造器10-8-1使用static构造器初始化静态成员10-8-2static构造器的限制10-9对象与内存10-9-l对象的...

    亮剑.NET深入体验与实战精要2

    2.7 参数修饰符params、out和ref的区别 96 2.8 值类型和引用类型的区别 100 2.9 结构与类的区别 103 2.10 Dispose()和Close()、Finalize()的 区别 106 2.11 string和StringBuilder有什么区别 106 2.12 Debug版本和...

    亮剑.NET深入体验与实战精要3

    2.7 参数修饰符params、out和ref的区别 96 2.8 值类型和引用类型的区别 100 2.9 结构与类的区别 103 2.10 Dispose()和Close()、Finalize()的 区别 106 2.11 string和StringBuilder有什么区别 106 2.12 Debug版本和...

Global site tag (gtag.js) - Google Analytics