zoukankan      html  css  js  c++  java
  • 参数修饰符out 和 ref的区别

    out  ———— 一个引用传递

    1、如果一个方法中的变量在使用out作为参数时,在方法中对out参数所作的更改都会反映到该变量。

    static void Method(out int iValue)
    {
    iValue = 44;
    }
    static void Main()
    {
    int a; //不必初始化 Method(out a);//显示使用out关键字 Console.WriteLine(a);//a is now 44 }

    2、若要使用out参数,方法定义以及方法的调用都必须显示使用out关键字;

    3、不必初始化作为out参数传递的变量,因为out参数在进入方法后清空自己,也因为这个原因必须在方法返回之前为out参数赋值。(只有地址没有值的参数是不能被.NET接受的)。ref要求变量必须在传递之前进行初始化。

    ref ----- 仅仅是一个地址!

    1、当一个方法在使用ref参数时,在方法中对ref参数所作的任何更改都将反映在该变量中。

    static void Method(ref int iValue)
    {
    iValue = 44;
    }
    static void Main()
    {
    int a = 0; //必须初始化 Method(ref a);//显示使用ref关键字 Console.WriteLine(a);//a is now 44 }

    2、如果使用ref参数,则必须将参数作为ref参数显示传递到方法。ref参数的值可以被传递到ref参数。

    3、ref参数传递的变量必须初始化,因为ref参数在进入方法后还是它自己,它这个地址指向的还是原来的值,正因为这个原因ref参数可以在使用它的方法内部不操作。这与out不同,out的参数在传递之前不需要显示初始化。

    out 和 ref示例

    public static string TestOut(out string str)
    {
    str="out value";
    return "hello world";
    } public static void TestRef(ref string str)
    {
    str="ref value";
    }
    public static void TestNoRef(string refstr)
    {
    refstr = "no ref";
    }
    static void Main()
    {
    string outStr;
    Console.WriteLine(TestOut(out outStr));//返回值 输出"return value" Console.WriteLine(outStr); //调用后的out参数输出"out value" string refStr;//必须初始化 TestRef(ref refStr);
    Console.WriteLine(refStr); //调用后的ref参数输出"ref value" TestNoRef(refStr);//不使用ref Console.WriteLine(refStr); //仍然输出"ref value";没有变 }
  • 相关阅读:
    2017年陕西省网络空间安全技术大赛WP
    XDCTF2014 Writeup
    TensorFlow入门测试程序
    python计算器
    CentOS安装crontab及使用方法
    在Linux 双机下自己手动实现浮动ip技术
    CentOS 7下安装配置FTP
    encodeURI 解码 编码
    jquery 消息提醒插件 toastmessage
    搭通自己的电脑与GitHub的传输通道
  • 原文地址:https://www.cnblogs.com/dm521/p/1548000.html
Copyright © 2011-2022 走看看