zoukankan      html  css  js  c++  java
  • 【原】 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 关键字。

  • 相关阅读:
    HDU 1114 Piggy-Bank
    HDU 2955 Robberies
    NTOJ 290 动物统计(加强版)
    POJ 3624 Charm Bracelet
    HDU 2602 Bone Collector
    POJ 1523 SPF(无向图割顶)
    HDU 5311 Hidden String
    HDU 1421 搬寝室
    HDU 1058 Humble Numbers
    POJ 3259 Wormholes(spfa判负环)
  • 原文地址:https://www.cnblogs.com/temptation/p/1155840.html
Copyright © 2011-2022 走看看