程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> c#方法中調用參數的值傳遞方式和引用傳遞方式以及ref與out的區別深入解析

c#方法中調用參數的值傳遞方式和引用傳遞方式以及ref與out的區別深入解析

編輯:更多關於編程
    以下是對c#方法中調用參數的值傳遞方式和引用傳遞方式,以及ref與out的區進行了詳細的分析介紹,需要的朋友可以過來參考下   復制代碼 代碼如下:
    #define Test

    using System;

    namespace Wrox.ProCSharp.ParameterTestSample
    ...{

     class ParemeterTest
     ...{
        static void TestInt(int[] ints,int i)
        ...{
            ints[0] = 100;
            i = 100;
        }

         static void TestInt(int[] ints, ref int i)
         ...{
             ints[0] = 200;
             i = 200;
         }

         static void TestInt2(int[] ints, out int i)
        ...{
            ints[0] = 300;
            i = 300;
        }

     
        public static void Main()
        ...{
            int i=0;
            int[] ints = ...{0,1,2,3,4};

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

            Console.WriteLine("i={0}",i);
            Console.WriteLine("ints[0]={0}",ints[0]);
            Console.WriteLine("------------------------------------");

            //默認情況下,c#所有參數都是通過值引用的,所以值類型i在上面的函數調用時,傳送的只是一個副本,函數只是在調用過程中影響了副本的值,對i值實際並沒有影響
            TestInt(ints, i);

            Console.WriteLine("i={0}",i);//這裡輸出的i值仍然是0
            Console.WriteLine("ints[0]={0}",ints[0]);
            Console.WriteLine("------------------------------------");

            //如果要改變i的值,可以用ref讓參數i通過引用傳送給函數
            TestInt(ints, ref i);

            Console.WriteLine("i={0}",i);//這裡輸出的i值為200
            Console.WriteLine("ints[0]={0}",ints[0]);
            Console.WriteLine("------------------------------------");

            //要改變i的值,也可以通過out關鍵字讓
            TestInt2(ints, out i);

            Console.WriteLine("i={0}", i);//這裡輸出的i值為300
            Console.WriteLine("ints[0]={0}", ints[0]);
            Console.WriteLine("------------------------------------");

            //ref與out很相似,但有也區別,ref必須要求參數初始化,out則不需要
            #if Test//要測試下面的二行,把代碼第一行#define Test去掉注釋即可
                int j;       
                SomeFunction(ints, ref j);//編譯時會報錯: 使用了未賦值的局部變量“j”
            #endif

            int k;
            TestInt2(ints, out k);
            Console.WriteLine("k={0}", k);
            Console.WriteLine("------------------------------------");       

            Console.ReadLine();
        }
     }

     
    }


    運行結果;
    -----------TestInt------------------
    i=0
    ints[0]=0
    ------------------------------------
    i=0
    ints[0]=100
    ------------------------------------
    i=200
    ints[0]=200
    ------------------------------------
    i=300
    ints[0]=300
    ------------------------------------
    k=300
    ------------------------------------

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved