程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 實例對比剖析c#引用參數的用法

實例對比剖析c#引用參數的用法

編輯:C#入門知識

c#引用參數傳遞的深入剖析
值類型的變量存儲數據,而引用類型的變量存儲對實際數據的引用。(這一點很重要,明白了之後就能區分開值類型和引用類型的差別)

在參數傳遞時,值類型是以值的形式傳遞的(傳遞的是值,對變量本身沒有影響),是將要傳遞的參數的值復制給函數的形參,因此在函數體類對於該形參的任何改變都不會影響原來的值;

引用類型是以對象引用的形式傳遞的(傳遞的是引用,也就是說把同一個父級傳過去,擁有相同的父親),是將要傳遞的對象的引用復制給函數的形參,這時形參是實參引用的復制,注意:是引用的復制,而不是原引用,和原引用指向相同的對象,因此對於引用對象所做的更改將會直接影響原來的值,但是對於引用本身,在函數內的任何改變將不會影響原引用。

先列出前輩出的兩個例子:

     data=                           
 a1.data = ;
 a1 =  A();
  a1.data = ;
    A a =  A();
 F(a);
  Console.WriteLine(a.data);        }    }

這是一個直接傳遞的例子,在F(a)調用時,是把值傳遞過去,a是引用參數,所以傳遞的是引用,也就是說把a的引用當做值傳遞給了F()函數中的a1,在F()函數中對a1操作:a1.data = "2";就改變了a的值,當執行a1 = new A();時,a1的引用初始化,也就是說不再是傳過來的那個,所以在執行a1.data = "3";是對a沒有影響。下面一個例子你會看到傳遞的不是值而就是引用,也就是說把引用傳給了a1,在a1 = new A();時,改變的是引用,也就是說引用的父親本身就變了 所以也就是改變了a的引用,最後a的值變成了3

 

ref 串參數:ref 關鍵字使參數按引用傳遞。其效果是,當控制權傳遞回調用方法時,在方法中對參數所做的任何更改都將反映在該變量中。若要使用 ref 參數,則方法定義和調用方法都必須顯式使用 ref 關鍵字。例如:對於值類型,可以向上面的引用串參數一樣傳遞,對於已經是引用類型的參數,大家可能會說那不是多此一舉嗎?其實不然,因為其中的實機理完全不一樣:考查上個示例的變種    

     data=      F(   
  a1.data = ;
  a1 =  A();
    a1.data = ;
  A a =  A();
  F( a);
  Console.WriteLine(a.data);
  }    

可以這麼理解,沒有ref時的引用對象的參數傳遞就相當於c++中的一般指針傳遞(函數聲明相當於: void F(Type * v)),而有ref時的引用對象的參數傳遞相當於c++中的一般指向指針的指針傳遞(函數聲明相當於: void F(Type ** v)).

http://www.cnblogs.com/roucheng/

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