• 【原】 C#关键字 Ref 学习笔记


    早上 BoyLee 问我对 " Ref " 是否理解,很惭愧,不知道这个关键字的用法,赶快学习了一下

    using System;
    using System.Collections.Generic;
    using System.Text;

    namespace RefDemo
    {
        
    class Program
        
    {
            
    /// <summary>
            
    /// 演示值类型的Ref用法
            
    /// </summary>
            
    /// <param name="i"></param>

            static void Method_1(ref int i)
            
    {
                i 
    = 7;
            }

            
    /// <summary>
            
    /// 演示引用类型的Ref用法
            
    /// </summary>
            
    /// <param name="str"></param>

            static void Method_2(ref string str)
            
    {
                str 
    = "Bechham";
            }


            
    static void Method_3(int i)
            
    {
                i 
    = 7;
            }


            
    static void Method_4(string str)
            
    {
                str 
    = "Bechham";
            }


            
    /// <summary>
            
    /// 演示数组的Ref用法
            
    /// </summary>
            
    /// <param name="arr"></param>

            static void Method_5(int[] arr)
            
    {
                
    for (int i = 0; i < arr.Length; i++)
                    arr[i] 
    = 0;
            }

            
    /// <summary>
            
    /// 演示数组的Ref用法
            
    /// </summary>
            
    /// <param name="arr"></param>

            static void Method_6(string[] arr)
            
    {
                
    for (int i = 0; i < arr.Length; i++)
                    arr[i] 
    = "Catherine";
            }


            
    /// <summary>
            
    /// 演示值类型的Out用法
            
    /// </summary>
            
    /// <param name="i"></param>

            static void Method_7(out int i)
            
    {
                i 
    = 7;
            }

            
    /// <summary>
            
    /// 演示引用类型的Out用法
            
    /// </summary>
            
    /// <param name="str"></param>

            static void Method_8(out string str)
            
    {
                str 
    = "Bechham";
            }


            
    static void Main(string[] args)
            
    {
                
    int val_1 = 22;             // 使用Ref,需要初始化
                Method_1(ref val_1);

                
    string str_2 = "Kaka";      // 使用Ref,需要初始化
                Method_2(ref str_2);

                Console.WriteLine(
    "Number:{0},Name:{1}", val_1, str_2);

                Console.WriteLine(
    "------------------------------");

                
    int val_3 = 10;
                Method_3(val_3);            
    // 值改变

                
    string str_4 = "Zidane";
                Method_4(str_4);            
    // 值改变

                Console.WriteLine(
    "Number:{0},Name:{1}", val_3, str_4);

                Console.WriteLine(
    "------------------------------");

                
    int[] arr_5 = 12345};

                
    for (int i = 0; i < arr_5.Length; i++)
                    Console.WriteLine(
    "Array(" + i + "):" + arr_5[i].ToString());

                Method_5(arr_5);            
    // 这里没有使用REF 参数. 

                
    for (int i = 0; i < arr_5.Length; i++)
                    Console.WriteLine(
    "Array(" + i + "):" + arr_5[i].ToString());

                Console.WriteLine(
    "------------------------------");

                
    string[] arr_6 = "ktgu""lee""lion"};

                
    for (int i = 0; i < arr_6.Length; i++)
                    Console.WriteLine(
    "Array(" + i + "):" + arr_6[i].ToString());

                Method_6(arr_6);            
    // 这里没有使用REF 参数. 

                
    for (int i = 0; i < arr_6.Length; i++)
                    Console.WriteLine(
    "Array(" + i + "):" + arr_6[i].ToString());

                Console.WriteLine(
    "------------------------------");

                
    int val_7;                  // 使用Out,不需要初始化
                Method_7(out val_7);

                
    string str_8;               // 使用Out,不需要初始化
                Method_8(out str_8);

                Console.WriteLine(
    "Number:{0},Name:{1}", val_7, str_8);          

                Console.ReadLine();
            }

        }

    }

    运行结果:


    Ref 在C#中被定义为方法参数。MSDN中对其描述如下:
    ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数的任何更改都将反映在该变量中。
    若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。


    Out 是另一个C#中的方法参数。MSDN中对其描述如下:
    out 关键字会导致参数通过引用来传递。
    这与 ref 关键字类似,不同之处在于 ref 要求变量必须在传递之前进行初始化。
    若要使用 out 参数,方法定义和调用方法都必须显式使用 out 关键字。

  • 相关阅读:
    状态压缩DP------学习小记
    hdu 4681 string
    poj 3254 Corn Fields
    poj 3680 Intervals
    poj 1149 pigs ---- 最大流
    最大流算法----(SAP 和 EK)
    poj 2151 Check the difficulty of problems
    FTP的PORT(主动模式)和PASV(被动模式)
    json.stringify(),json.stringify()与json.parse()的区别
    css 选择器
  • 原文地址:https://www.cnblogs.com/temptation/p/1155840.html
Copyright © 2020-2023  润新知