標籤:style color ar strong sp c on r ef
在編程過程中對於函數之間的參數的傳遞一般分為兩種:傳值和傳地址。下面為大家分析一下。
傳值
比如你又一份文檔,如果採用傳值的話,相當於我複製了一份,因此我對我這份文檔的修改都不會影響到你的那份。如果你對這句話瞭解的話,那麼就簡單了。
下面看一個小Demo。
<span style="font-family:SimSun;font-size:18px;"> static void Main(string[] args) { //定義一個變數 int val=1 ; //調用方法 Method(val); Console.WriteLine(val); //最後輸出結果還是1 } static void Method( int i) { //這是我的那份文檔的複製品 //無論我如何修改,都影響不到你的 i = i+ 44; Console.WriteLine(i); //我的文件的輸出結果是45 }</span>
傳址引用
還是你又一份文檔,只不過如果採取傳值引用的話,我們兩個人共用這份文檔,那麼可想而知,無論誰操作都會影響到最後的顯示
Ref關鍵字
還是上面的那個Demo,如果換成Ref關鍵字,效果如下
<span style="font-family:SimSun;font-size:18px;"> static void Main(string[] args) { //定義一個變數 int val=1 ; //調用方法 Method( ref val); Console.WriteLine(val); //最後輸出結果是45 } //按照傳引用調用 static void Method(ref int i) { //倆人共用文檔,所以我做的修改 //都會在最後呈現 i = i+ 44; }</span>
Out關鍵字
近來再編程過程中又遇到了Out關鍵字,與Ref的功能相當,都是傳值引用,區別在於Ref在傳遞之前,需要對文檔進行初始化。還是上面的例子,看一下效果
<span style="font-family:SimSun;font-size:18px;"> static void Main(string[] args) { //定義一個變數 int val ;//與Ref的區別在於,在此可以不進行初始化 //調用方法 Method( out val); Console.WriteLine(val); //最後輸出結果是44 } //按照傳引用調用 static void Method(out int i) { //i = i+44;//這句話會報錯 i = 44; }</span>
Ref與Out的區別
第一:還是兩份文檔,只不過採取Ref方式的話,你不能給我一份空文檔,而Out則可以允許你給我一份空文檔。
第二:採取Ref方式,我可以直接對參數進行+、-等操作,而Out方式則必須先賦值,才能進行相應操作。
C#中Out和Ref參數修飾符