out与ref修饰符
out修饰符
定义
作用
使用注意
总结
定义
out意为output,所以被out修饰的参数叫做输出参数.
通过使用out修饰的参数,方法可以返回对应参数的值
作用
static void Add(int x,int y,out int sum)
{
sum=x+y; //x,y相加
}
调用方法:
static void Main(string[] args)
{
int x = , y = ;
int sum;
Add(x, y,out sum);//调用方法
Console.WriteLine("sum="+sum);
Console.ReadKey();
}
发现sum=3
通过调试我们可以发现,在调用方法Add()的时候,形参并没有开辟一块新的地址,而是引用了实参sum的地址,.所以实参sum和形参sum指向的是同一栈空间的值

结论:方法中,被out修饰的形参的值发生了改变,会引起对应实参的值的改变
使用注意(一)
在调用方法前,实参可以没有初始值.
但是,调用的方法中必须同样有out修饰,如果没有out修饰将会报错.
调用的语法如下:
Add(x,y,out sum);//使用者调用方法时必须在参数前用out修饰
使用注意(二)
在方法的内部,必须要对out修饰的参数第一次出现的地方赋值,否则会报错.
static void Add(int x,int y,out int sum)
{
int temp=sum;//报错,” 使用了未赋值的 out 参数“sum”
sum=x+y;
}
即使最后也对sum赋值了,但是由于sum第一次出现没有赋值,所以也是错误的
总结
使用out修饰符,可以让实参随着方法的操作得到改变.通过它,调用者只使用一次方法调用就能获得多个返回值.
如果方法定义了输出参数,就必须在退出方法之前为这个参数赋一个有效值.记住,方法中第一次出现这个参数的时候就应该赋值
所以,方法输出这个参数的时候,这个参数必定有赋值,因此称之为输出参数
ref修饰符
定义
与out输出参数的区别
作用
使用注意
总结
定义
ref意为reference,所以被ref修饰的参数叫做引用参数.
通过使用ref修饰的参数,方法可以返回对应参数的值
作用
作用和out修饰符相同,参数之间传递的不是值的本身,而是值所占用空间的地址

与out输出参数的区别
输出参数不需要在他们被传递给方法之前初始化,因为方法在退出之前必须为输出参数赋值
引用参数必须在他们被传递给方法之前初始化,因为是在传递一个对已存在的变量的引用,如果不给他初始值,就相当于要对一个未赋值的本地变量进行操作
使用注意(一)
在调用方法前,实参必须要有初始值.也就是要分配好空间,有地址!!!
但是,调用的方法中必须同样有ref修饰,如果没有ref修饰将会报错.
使用注意(二)
与out修饰符不同, ref修饰的参数在方法内部不一定需要赋值,即使在方法内部不做任何操作也不会报错
总结
使用ref修饰符.通过它,调用者只使用一次方法调用也能获得多个返回值.通常在方法内部进行数据交换,排序等引用操作
如果方法定义了引用参数,就必须在调用方法前,实参中分配好地址
所以,方法是引用这个参数的地址(由于调用前已经分配好地址),因此称之为引用参数
如有错漏之处,欢迎批评指正
out与ref修饰符的更多相关文章
- C#之out修饰符、ref修饰符、params修饰符的简单介绍
一.out修饰符 1.调用一个带有输出参数的方法也需要使用out 修饰符,但是作为输出变量传递的本地变量在将他们作为输出变量传递前不需要赋值(因为调用后会改变或丢失),编译器允 许 ...
- C# ref、out、params与值类型参数修饰符
1.值类型: static void Main(string[] args) { ; ; NumVal(a, b); Console.WriteLine("a={0},b={1}" ...
- Delphi编译器属性(特别修饰符Ref,Unsafe,Volatile,Weak)
1 Refdelphi中常量参数就像一个本地常量,或者说只读变量.常量参数与值参数类似,除了不能在过程或函数体内给常量参数赋值,并且不能将常量参数传给另一个var类型参数.(但是,如果你常量参数传递的 ...
- C#的参数修饰符out,params,ref
using System; namespace ParamsProgram { class TestParams { public static void Main(string[] args)//s ...
- 参数修饰符ref,out ,params的区别
参数修饰符ref,out ,params的区别 C#中有三个关键字-ref,out ,params,可是这三个之间的区别你都明白了吗? 那么我们就来认识一下参数修饰符ref,out ,params吧, ...
- C# 基础(一) 访问修饰符、ref与out、标志枚举等等
C# 基础(一) 访问修饰符.ref与out.标志枚举等等 一.访问修饰符 在C#中的访问修饰符有:private.protected.internal.public public:公共类型,同一程序 ...
- Out,ref,params修饰符,可选参数,命名参数
out输出,在调用函数中声明,在被调用函数中赋值: ref在调用函数中赋值,后调用: params修饰符,static double CalculateAverage(params[] values) ...
- C#中ref和out关键字的应用以及区别(参数修饰符)
ref ref的定义 ref是reference的缩写,通过引用来传递参数的地址,ref基本上是服务于值类型的 ref的使用 //不使用 ref; void Method(int myRefInt) ...
- c#参数修饰符-ref
ref 关键字通过引用传递参数. 方法定义和调用方法必须显式使用ref关键字: 调用方法时参数必须初始化: 参数中可以声明多个ref修饰的参数. 例: public void UseRef( ref ...
随机推荐
- json&pickle序列化
一.用途 我们需要将内存中的数据进行序列化,即写入文件中时,写入的类型只能是字符串或者二进制类型.但是如果我们想要将复杂一些的数据类型,如:列表.字典或者函数之类的同样进行序列化,我们就要用到 jso ...
- 在Centos系统下使用命令安装gnome图形界面程序
第一步:先检查yum 是否安装了,以及网络是否有网络.如果这两者都没有,先解决网络,在解决yum的安装. 第二步:在命令行下 输入下面的命令来安装Gnome包. # yum groupinstall ...
- Python学习笔记(四十)— 内置模块(9)HTMLParser
摘抄自:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001432002312 ...
- PHP与数据库
连接数据库 Connect 访问数据库的数据之前,先要与数据库建立连接,使用mysql_connect()方法与数据库建立连接. mysql_connect()参数 <?php //server ...
- jQuery.pin.js笔记
jQuery.pin.js是一个把元素钉在页面上某个位置的插件,它能够将某个元素一直挂在一个固定的位置而不论滚动条是否滚动. 特点: 1. 可以钉住一个元素,主要作用就是滚动超出的时候不会隐藏而是一直 ...
- 阿里分布式开源框架DUBBO 入门+ 进阶+ 项目实战视频教程
史诗级Java/JavaWeb学习资源免费分享 欢迎关注我的微信公众号:"Java面试通关手册"(坚持原创,分享各种Java学习资源,面试题,优质文章,以及企业级Java实战项目回 ...
- [005] unique_sub_string
[Description] Given a string, find the largest unique substring. e.g. str[] = "asdfghjkkjhgf&qu ...
- ZebraDatepicker中文显示
解决方法:①<script type="text/javascript" src="xx.js" charset="UTF-8"> ...
- 152.Maximum Product Subarray---dp---连续子数组的最大乘积---《编程之美》2.13子数组的最大乘积
题目链接:https://leetcode.com/problems/maximum-product-subarray/description/ 题目大意:给出一串数组,找出连续子数组中乘积最大的子数 ...
- 【会装】kylin的安装(填坑)和简单使用
1.简介 kylin的设计思想是空间换时间,将hive上的大表的维度全部排列组合计算也将度量提前计算然后存入HBase库,这个步骤在kylin中称之为build cube. 在查询的时候已经建立cu ...