out修饰符


定义

作用

使用注意

总结


定义

out意为output,所以被out修饰的参数叫做输出参数.

通过使用out修饰的参数,方法可以返回对应参数的值

 

作用

先看一个例子
定义变量:
  int x=,y=,sum;//定义x,y,sum三个整型变量 
 
定义方法:
 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修饰符的更多相关文章

  1. C#之out修饰符、ref修饰符、params修饰符的简单介绍

    一.out修饰符 1.调用一个带有输出参数的方法也需要使用out 修饰符,但是作为输出变量传递的本地变量在将他们作为输出变量传递前不需要赋值(因为调用后会改变或丢失),编译器允           许 ...

  2. C# ref、out、params与值类型参数修饰符

    1.值类型: static void Main(string[] args) { ; ; NumVal(a, b); Console.WriteLine("a={0},b={1}" ...

  3. Delphi编译器属性(特别修饰符Ref,Unsafe,Volatile,Weak)

    1 Refdelphi中常量参数就像一个本地常量,或者说只读变量.常量参数与值参数类似,除了不能在过程或函数体内给常量参数赋值,并且不能将常量参数传给另一个var类型参数.(但是,如果你常量参数传递的 ...

  4. C#的参数修饰符out,params,ref

    using System; namespace ParamsProgram { class TestParams { public static void Main(string[] args)//s ...

  5. 参数修饰符ref,out ,params的区别

    参数修饰符ref,out ,params的区别 C#中有三个关键字-ref,out ,params,可是这三个之间的区别你都明白了吗? 那么我们就来认识一下参数修饰符ref,out ,params吧, ...

  6. C# 基础(一) 访问修饰符、ref与out、标志枚举等等

    C# 基础(一) 访问修饰符.ref与out.标志枚举等等 一.访问修饰符 在C#中的访问修饰符有:private.protected.internal.public public:公共类型,同一程序 ...

  7. Out,ref,params修饰符,可选参数,命名参数

    out输出,在调用函数中声明,在被调用函数中赋值: ref在调用函数中赋值,后调用: params修饰符,static double CalculateAverage(params[] values) ...

  8. C#中ref和out关键字的应用以及区别(参数修饰符)

    ref ref的定义 ref是reference的缩写,通过引用来传递参数的地址,ref基本上是服务于值类型的 ref的使用 //不使用 ref; void Method(int myRefInt) ...

  9. c#参数修饰符-ref

    ref 关键字通过引用传递参数. 方法定义和调用方法必须显式使用ref关键字: 调用方法时参数必须初始化: 参数中可以声明多个ref修饰的参数. 例: public void UseRef( ref ...

随机推荐

  1. JAX-WS搭建WebService和客户端访问程序

    开发环境:myeclipse8.6+jdk1.6.0_29+tomcat6.0.37 XFire搭建webservice: http://www.cnblogs.com/gavinYang/p/352 ...

  2. string的内存本质

    虽然没有研究过string的源代码,不过可以确定的是string的内存空间是在堆上开辟的,它自己负责释放空间,不用我们关系. 我们用一个动态分配的字符串指针初始化一个string对象retStr,它会 ...

  3. CS46 C 枚举二分

    给你n*2个数其中n个数是原数减去了X值的数.问你满足条件的X值和原来的n个数.注意X为正整数. X should be positive,没0的 思路很简单,一个数必定会对应一个数,那么枚举一个数和 ...

  4. vijos 1288 箱子游戏 计算几何

    背景 hzy是箱子迷,他很喜欢摆放箱子,这次他邀请zdq,skoier一起来玩game... 描述 地板上有一个正方形的大箱子和许多三角型的小箱子.所有的小箱子都在大箱子里面,同时,一些三角形的小箱子 ...

  5. C11线程管理:异步操作

    1.异步操作 C++11提供了异步操作相关的类,std::future.std::promise和std::package_task.std::future作为异步结果的传输通道,方便的获取线程函数的 ...

  6. [NOIP2003]栈 题解(卡特兰数)

    [NOIP2003]栈 Description 宁宁考虑的是这样一个问题:一个操作数序列,从1,2,一直到n(图示为1到3的情况),栈A的深度大于n. 现在可以进行两种操作: 1.将一个数,从操作数序 ...

  7. 75.VS2013和opencv3.1.0开发环境配置

    首先要做的就是 开发环境配置,具体过程如下: Step 1:OpenCV环境变量配置 我的电脑--->属性--->高级系统设置--->高级--->环境变量--->系统变量 ...

  8. linux下的僵尸进程处理SIGCHLD信号【转】

    转自:http://www.cnblogs.com/wuchanming/p/4020463.html 什么是僵尸进程? 首先内核会释放终止进程(调用了exit系统调用)所使用的所有存储区,关闭所有打 ...

  9. PowerPC简单了解

    PowerPC相对于ARM优势: Powerpc芯片凭借其出色的性能和高度整合和技术先进特性在网络通信应用,工业控制应用,家用数字化,网络存储领域,军工领域,电力系统控制等都具有非常广泛的应用.由于P ...

  10. 2017 CERC

    2017 CERC Problem A:Assignment Algorithm 题目描述:按照规则安排在飞机上的座位. solution 模拟. 时间复杂度:\(O(nm)\) Problem B: ...