1、首先來解釋一下c#中的型別
在c#中每一種型別要麼是值型別,要麼是引用型別。所以每個物件要麼是值型別的例項,要麼是引用型別的例項。並且在c#中物件的分配模式取決於物件的實現方式,即值型別使用靜態分配,引用型別使用動態分配。即便是在進行值型別例項化的時候使用new關鍵字進行例項化也不會改變例項的分配方式,在這種情況下new操作法僅起到向建構函式傳遞引數的作用。
c#中的引用是乙個不同於引用型別的概念,它介於c++中的指標和引用之間。可以是乙個到物件的引用,所有該物件的可訪問成員都可以通過「.」操作法進行訪問;引用可以為空;引用可以被修改(這裡要注意在方法引數中使用ref關鍵字的結果) ;不能夠訪問物件的物理空間,即物件的實際位址。
2、引用型別和值型別**示例
[c-sharp]view plain
copy
//typeval 是值型別,因為它是乙個結構體
struct
typeval
} //typeref 引用型別
class
typeref
} class
program
} 3、在方法中修改引用型別的範例
[c-sharp]view plain
copy
class
reftest
} class
program
static
void
f_reftest()
輸出結果如下:
可見對於新增ref關鍵字的引用型別,其效用就在於能夠在方法內部對引用的指向進行修改。如果不新增ref關鍵字,那麼其作用僅限於通過引用修改該引用所指向的物件的內部狀態(物件的字段等)。
4、ref 與string
c#中string類具有三大特點,即sealed、等價比較、例項建立後的不可變性。
[c-sharp]view plain
copy
static
void
teststring(
refstring
str1,
string
str2)
static
void
main(
string
args)
5、總結
ref(引用型引數)對方法的資料傳遞是通過實際值的記憶體位址來傳遞的,所以說對其的改變將影響到它實際的記憶體位址。如果ref 作用於引用型別,那麼意味著可以修改引用本身的值,即修改引用的指向。
C 基礎 值型別 引用型別與ref關鍵字
1 inta 10 b 20 2void swap intx,inty 3 1 void swap int x,int y 2 1 class program 2 78 static void main string args 9 14 1 class program 2 78 static voi...
關於引用型別ref的運用
一直沒有弄明白ref的用法,今天用了一下msdn,發現竟然是如此的簡單,用的時間要注意一句話把我的迷津全部點開了 例子 class refexample static void main 在乙個方法的引數定義為ref型別,在呼叫方法裡顯示的使用ref關鍵字。在三層架構裡面,驗證資料是否完整,也會用到...
ref 修飾值型別和修飾引用型別
ref 關鍵字傳遞棧位址 引用型別傳遞的堆的位址 引用型別的物件或例項儲存在堆上,而棧上儲存的是指向放物件的堆的位址 棧上放了個位址,這個位址是物件在堆上的存放位置 不加ref關鍵字時,我們傳遞的引用型別,其實是乙個指向堆的位址,method a a 即 棧裡面存的那個位址 當我們在方法裡面進行操作...