C 引用型別與ref

2021-07-25 09:04:01 字數 1303 閱讀 9876

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 即 棧裡面存的那個位址 當我們在方法裡面進行操作...