zoukankan      html  css  js  c++  java
  • out与ref修饰符

    out修饰符


    定义

    作用

    使用注意

    总结


    定义

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

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

     

    作用

    先看一个例子
    定义变量:
     1 int x=1,y=2,sum;//定义x,y,sum三个整型变量 
     
    定义方法:
    1 static void Add(int x,int y,out int sum)
    2 {
    3     sum=x+y; //x,y相加
    4 }                                    

    调用方法:

    复制代码
    1 static void Main(string[] args)
    2 {
    3             int x = 1, y = 2;
    4             int sum;
    5             Add(x, y,out sum);//调用方法
    6             Console.WriteLine("sum="+sum);
    7             Console.ReadKey();
    8 }
    复制代码

    发现sum=3 

    通过调试我们可以发现,在调用方法Add()的时候,形参并没有开辟一块新的地址,而是引用了实参sum的地址,.所以实参sum和形参sum指向的是同一栈空间的值

     
     
     
     

    结论:方法中,被out修饰的形参的值发生了改变,会引起对应实参的值的改变


     使用注意(一)

    在调用方法前,实参可以没有初始值.

    但是,调用的方法中必须同样有out修饰,如果没有out修饰将会报错.

    调用的语法如下:

      1 Add(x,y,out sum);//使用者调用方法时必须在参数前用out修饰 


    使用注意(二)

    在方法的内部,必须要对out修饰的参数第一次出现的地方赋值,否则会报错.

    1 static void Add(int x,int y,out int sum)
    2 {
    3       int temp=sum;//报错,” 使用了未赋值的 out 参数“sum”
    4       sum=x+y;
    5 }

    即使最后也对sum赋值了,但是由于sum第一次出现没有赋值,所以也是错误的


     总结

    • 使用out修饰符,可以让实参随着方法的操作得到改变.通过它,调用者只使用一次方法调用就能获得多个返回值.

    • 如果方法定义了输出参数,就必须在退出方法之前为这个参数赋一个有效值.记住,方法中第一次出现这个参数的时候就应该赋值

    • 所以,方法输出这个参数的时候,这个参数必定有赋值,因此称之为输出参数



     

    ref修饰符


    定义

    与out输出参数的区别

    作用

    使用注意

    总结


    定义

    ref意为reference,所以被ref修饰的参数叫做引用参数.

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


    作用

    作用和out修饰符相同,参数之间传递的不是值的本身,而是值所占用空间的地址


    与out输出参数的区别

    • 输出参数不需要在他们被传递给方法之前初始化,因为方法在退出之前必须为输出参数赋值

    • 引用参数必须在他们被传递给方法之前初始化,因为是在传递一个对已存在的变量的引用,如果不给他初始值,就相当于要对一个未赋值的本地变量进行操作


    使用注意(一)

    在调用方法前,实参必须要有初始值.也就是要分配好空间,有地址!!!

    但是,调用的方法中必须同样有ref修饰,如果没有ref修饰将会报错.


    使用注意(二)

    与out修饰符不同, ref修饰的参数在方法内部不一定需要赋值,即使在方法内部不做任何操作也不会报错


    总结

    • 使用ref修饰符.通过它,调用者只使用一次方法调用也能获得多个返回值.通常在方法内部进行数据交换,排序等引用操作

    • 如果方法定义了引用参数,就必须在调用方法前,实参中分配好地址

    • 所以,方法是引用这个参数的地址(由于调用前已经分配好地址),因此称之为引用参数

  • 相关阅读:
    利用libxml2解析xml文档
    找出两个链表的第一个公共结点
    [转载]风雨20年:我所积累的20条编程经验
    inotify监测文件及文件夹
    [转载]linux下svn常用指令
    利用zlib进行数据压缩
    2013腾讯编程马拉松初赛:郑厂长系列故事——体检
    Socket编程之简单介绍
    C语言中static的作用总结
    写程序实现wireshark的抓包功能
  • 原文地址:https://www.cnblogs.com/lyl6796910/p/3958815.html
Copyright © 2011-2022 走看看