c#中的引數傳遞,根據引數的型別可以分為四類
在預設情況下,clr方法中引數的傳遞都是按值傳遞
對於引數又分為:
形參:被呼叫方法中的引數,實參:呼叫方法的引數
對於值型別的按值傳遞,傳遞的是該值型別例項的乙個拷貝,也就是形參此時接受到的是實參的乙個副本,被呼叫方法操作是實參的乙個拷貝,所以此時並不影響原來呼叫方法中的引數值,為了證明這點,看看下面的**和執行結果就明白了:class
program
// addnum就是形參,也就是被呼叫方法中的引數
private
static
void
add(int addnum)
}
執行結果為:class
program
// 1. 值型別按值傳遞情況
private
static
void
add(int addnum)
}
當傳遞的引數是引用型別的時候,傳遞和操作的是指向物件的引用,此時方法的操作就會改變原來的物件。
執行結果為:class
program
// 2. 引用型別按值傳遞情況
private
static
void
addref
(refclass addnumref)
}class
refclass
對於string型別同樣是引用型別,然而對於string型別的按值傳遞時,此時引用型別的按值傳遞卻不會修改實參的值
執行結果為:class
program
// 3. string引用型別的按值傳遞的特殊情況
private
static
void
changestr
(string oldstr)
}
不管是值型別還是引用型別,我們都可以使用ref 或out關鍵字來實現引數的按引用傳遞,然而按引用進行傳遞的時候,需要注意下面兩點:
方法的定義和方法呼叫都必須同時顯式使用ref或out,否則會出現編譯錯誤
clr允許通過out 或ref引數來實現方法過載。如:
#region clr 允許out或ref引數來實現方法過載
private
static
void
add(string str)
// 編譯器會認為下面的方法是另乙個方法,從而實現方法過載
private
static
void
add(ref string str)
#endregion
執行結果為:class
program
#region 按引用傳遞
// 1. 值型別的按引用傳遞情況
private
static
void
changebyvalue
(ref int numvalue)
// 2. 引用型別的按引用傳遞情況
private
static
void
changebyref
(ref string numref)
#endregion
}
C 中的引數傳遞
傳值方式 include void swap float m,float n 以上 將實參的值傳送形參,當被呼叫函式執行完畢時,m和n從記憶體中釋放。a和b的值沒有發生任何變化。即形參發生變化不影響實參。傳位址方式 形參變化影響實參 include void swap float m,float n...
C 函式中引數的傳遞
2 34 include stdafx.h 5 include 6 7using namespace std 89 值傳遞 10void swap1 int p,int q 11 1718 指標傳遞,函式體內只有指標值的變化 19void swap2 int p,int q 2026 27 指標傳遞...
C 中陣列引數傳遞
include 傳遞陣列引數的幾種方式 void printvalues const int a 10 void printvalues2 int a 10 控制邊界 方法1 void printvalues4 int start,int end void printvalues5 const in...