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 关键字。

  • 相关阅读:
    一个Mini的ASP.NET Core框架的实现
    DDD领域驱动设计理论篇
    你准备好了在云中工作吗?
    FFM原理及公式推导
    IOS学习:常用第三方库(GDataXMLNode:xml解析库)
    网络数据的XML解析
    iOS开发之html解析
    iOS解析HTML
    iOS设计模式——MVC(Model-View-Controller)
    iOS设计模式——Category
  • 原文地址:https://www.cnblogs.com/temptation/p/1155840.html
Copyright © 2011-2022 走看看