C#中方法的參數有四種類(lèi)型: 1. 值參數類(lèi)型 (不加任何修飾符,是默認的類(lèi)型) 2. 引用型參數 (以ref 修飾符聲明) 3. 輸出型參數 (以out 修飾符聲明) 4. 數組型參數 (以params 修飾符聲明)---------------------------------------------------------------------1、值類(lèi)型是方法默認的參數類(lèi)型,采用的是值拷貝的方式。
簡(jiǎn)單講就是傳遞參數到方法體內,js、asp、mvc等寫(xiě)函數有帶參數的話(huà),我們外部引用都會(huì )傳遞值進(jìn)去。function c(int c){ alert(c); return c;}var x = c(5/*5就是值參數傳遞*/);2和3、一般比較不常使用。
4、params 關(guān)鍵字可以指定在參數數目可變處采用參數的方法參數。也就是說(shuō)。
使用params可以自動(dòng)把你傳入的值按照規則轉換為一個(gè)新建的數組。這個(gè)參數個(gè)數是可控的,像1不可控,寫(xiě)的方法是帶幾個(gè)參數。
引用的時(shí)候就傳遞幾個(gè)值進(jìn)去public static void p(params object[] list){/*一般通過(guò)編列,計算結果*/for(var i = 0; i < list.length; i++){ alert(list[i]);}}object[] arr = new object[3] { 1, 'a', "k" };p(arr);。
C#參數類(lèi)型有四種: 值類(lèi)型 引用類(lèi)型 輸出類(lèi)型 數組型參數 C#參數類(lèi)型(1):值參數 所謂值參數,就是利用值向方法傳遞參數時(shí),編譯程序給實(shí)參的值做一份拷貝,并將此拷貝傳遞給該方法,這樣做的結果就是被調用的方法不會(huì )修改實(shí)參的值,保證了實(shí)際值的安全,在調用方法時(shí),如果形參的類(lèi)型時(shí)值類(lèi)型的話(huà),必須保證實(shí)參的類(lèi)型也是值類(lèi)型的數據. 例子: public class MyClass { public MyClass() { // //TODO: 在此處添加構造函數邏輯 // } public void ChangeValue(string value) { value = "Value is Changed!"; } } ------------------------------------- string value = "Value"; Response.Write(value+""); MyClass mc = new MyClass(); mc.ChangeValue(value); Response.Write(value); 效果: C#參數類(lèi)型(2):引用參數 使用ref關(guān)鍵字可以使參數按照引用傳遞.在需要傳遞回調用方法時(shí),在方法中對參數所做的任何更改都將反映在該變量中,若使用ref關(guān)鍵字,則在方法定義和調用方法時(shí)都必須顯式使用ref關(guān)鍵字. 注意ref的使用! 例子: public class MyClass { public MyClass() { // //TODO: 在此處添加構造函數邏輯 // } public void ChangeValue(ref string value) { value = "Value is Changed!"; } } ----------------------------- string value = "Value"; Response.Write(value+""); MyClass mc = new MyClass(); mc.ChangeValue(ref value); Response.Write(value); 效果: C#參數類(lèi)型(3):輸出參數 使用out關(guān)鍵字來(lái)進(jìn)行引用傳遞,這和ref關(guān)鍵字很累世,不同之處在于ref要求變量必須在傳遞之前就進(jìn)行初始化,若使用out關(guān)鍵字,則方法定義和調用時(shí)都必須顯式的使用out關(guān)鍵字. 例子: public class MyClass { public MyClass() { // //TODO: 在此處添加構造函數邏輯 // } public void ChangeValue(out string value) { value = "Value is Changed!"; } } --------------------------------- string value ; MyClass mc = new MyClass(); mc.ChangeValue(out value); Response.Write(value); 效果: C#參數類(lèi)型(4):數組型參數 數組型參數就是聲明params關(guān)鍵字,用于指定在參數數目可變處采用參數的方法參數. 在方法聲明中的params關(guān)鍵字之后不允許任何其他參數,并且在方法聲明中只允許一個(gè)params關(guān)鍵字. 例子: public class MyClass { public MyClass() { // //TODO: 在此處添加構造函數邏輯 // } public void ChangeValue(params string[] value) { foreach (string s in value) { HttpContext.Current.Response.Write(s + ""); } } } ------------------------------------------ string value1 = "Value1"; string value2 = "Value2"; MyClass mc = new MyClass(); mc.ChangeValue(value1, value2); 效果: 另: 數組類(lèi)型的參數: 數組類(lèi)型是引用類(lèi)型的數據,所以也應歸類(lèi)于引用類(lèi)型. public class MyClass { public MyClass() { // //TODO: 在此處添加構造函數邏輯 // } public void ChangeValue(string[] value) { value[0] = "This is Value0,Changed!"; } } ---------------------------------------------- string[] value = { "Value1", "Value2" }; Response.Write(value[0] + ""); MyClass mc = new MyClass(); mc.ChangeValue(value); Response.Write(value[0] + ""); 效果: 注意: ref和out的區別: 傳遞到ref參數的參數必須最先初始化,而out的參數在傳遞之前不必初始化.。
形參出現在函數定義中,在整個(gè)函數體內都可以使用, 離開(kāi)該函數則不能使用。實(shí)參出現在主調函數中,進(jìn)入被調函數后,實(shí)參變量也不能使用。 形參和實(shí)參的功能是作數據傳送。發(fā)生函數調用時(shí), 主調函數把實(shí)參的值傳送給被調函數的形參從而實(shí)現主調函數向被調函數的數據傳送。
1.形參變量只有在被調用時(shí)才分配內存單元,在調用結束時(shí), 即刻釋放所分配的內存單元。因此,形參只有在函數內部有效。 函數調用結束返回主調函數后則不能再使用該形參變量。
2.實(shí)參可以是常量、變量、表達式、函數等, 無(wú)論實(shí)參是何種類(lèi)型的量,在進(jìn)行函數調用時(shí),它們都必須具有確定的值, 以便把這些值傳送給形參。 因此應預先用賦值,輸入等辦法使實(shí)參獲得確定值。
3.實(shí)參和形參在數量上,類(lèi)型上,順序上應嚴格一致, 否則會(huì )發(fā)生“類(lèi)型不匹配”的錯誤。
4.函數調用中發(fā)生的數據傳送是單向的。 即只能把實(shí)參的值傳送給形參,而不能把形參的值反向地傳送給實(shí)參。 因此在函數調用過(guò)程中,形參的值發(fā)生改變,而實(shí)參中的值不會(huì )變化。
形參和實(shí)參其實(shí)沒(méi)有實(shí)質(zhì)區別,都是值傳遞。
形式上你可以發(fā)現實(shí)參是可以在其他函數里面修改的~
形參和實(shí)參最大的區別就是形參能夠雖然也能夠進(jìn)行值得修改,但是只能夠在函數內部,而實(shí)參是可以在全局范圍內修改變量的值~這里需要提的是C語(yǔ)言有全局和局部的概念~形參就是僅僅的值傳遞,而當你的值傳遞到函數內部的時(shí)候,這個(gè)時(shí)候函數內修改的參數的地址已經(jīng)不是主函數的變量地址了~也就是是說(shuō)函數內對數值的任何修改都對主函數的變量沒(méi)有任何影響
與之相對的實(shí)參,一般是通過(guò)指針的形式,它雖然也是傳遞值,但是這個(gè)值是地址,所以呢,你可以發(fā)現,地址傳過(guò)去了,那么就可以像一根指針一樣遠程操縱者主函數內部的變量。
下面這個(gè)例子我都寫(xiě)好了,記住是VisualStudioC++的運行環(huán)境啊~別用TC了~
#include<stdio.h>
int main()
{
void max1(int *a,int *b);//實(shí)參例子
void max2(int c,int d);//形參例子
int *x,*y;
int e,f;char k;
printf("請輸入兩個(gè)數字,格式為:”數字,數字“(不包括引號)");
scanf("%d,%d",&e,&f);
printf("請輸入你要演示的例子:\n 1.實(shí)參例子 \n 2.形參例子");
getchar(k);
switch(k)
{
case'1':{
x=&e;y=&f;max1(x,y);printf("這是在主函數輸出的數據:e=%d,f=%d",&e,&f);
}
case'2':{max2(e,f);
printf("這是在主函數輸出的數據:e=%d,f=%d",&e,&f);}
default:printf("error\n");
}
return 1;
}
void max1(int *a,int *b);//實(shí)參例子
{
int c;
if(*a>*b)
{
c=*a;*a=*b;*b=c;
}
printf("這是在max1函數輸出的數據:e=%d,f=%d",a,b);
}
void max2(int c,int d);//形參例子
{
int g;
if(c>d)
{
g=c;c=d;d=g;
}
printf("這是在max2函數輸出的數據:e=%d,f=%d",a,b);
}
實(shí)參:調用的地方使用的變量,可以是變量,也可以是常量
形參:聲明函數的地方或者直接寫(xiě)子函數代碼的地方用的
如
int f(int m) //m是形參
{
return m++; //這里m也是形參
}
main()
{
int a=5,b,c;
b=f(a); //這里a是實(shí)參
c=f(3); //這里3是實(shí)參
}
這樣知道什么是實(shí)參,什么是形參了吧
其實(shí)不管哪里是實(shí)參,哪里是形參,這個(gè)定義名字真的無(wú)所謂,我就經(jīng)常記不住,但是你只要知道怎么用即可
注意幾個(gè)地方,對于參數
1、可以同名,但是不建議實(shí)參和形參同名
雖然同名可以使用,但是容易混淆
同名時(shí),就是變量作用域的問(wèn)題,有點(diǎn)難以把握,容易出錯
2、實(shí)參和形參不在同一個(gè)內存空間中(除非實(shí)參用&來(lái)取地址直接傳遞過(guò)去,這個(gè)c中一般不講,c++中才講)。
這里產(chǎn)生的效果就是在子函數中改變形參的值,不會(huì )改變實(shí)參的值
&取地址時(shí),那么形參需要指針形式,因為參數是要地址。因為同在一個(gè)內存地址中,所以可以改變實(shí)參的值
參數傳遞主要用于模塊化程序設計中。
如果不了解參數傳遞是無(wú)法編寫(xiě)出正確的調用函數的。形參就是形式參數,用一個(gè)變量代表大家。
實(shí)參就是實(shí)際參數,用一個(gè) 確切的數值代替形式參數,可以是表達式。實(shí)際參數與形式參數的參數個(gè)數、類(lèi)型和順序都應一樣,如果不一樣的話(huà),系統會(huì )強制轉換,這樣會(huì )造成數據的丟失。
實(shí) 參向形參的傳遞是值的傳遞。 這個(gè)值就是對實(shí)參的表達式進(jìn)行計算的結果,它可以是常量值、變量值、數組元素、函數值等。
如果實(shí)參是數組名了,那么它傳送的就是地址的值了。比如: double power(double x ,int n)定義一個(gè)雙精度參數 power(3.0,5) 調用 x n 是形參,3.0,5是實(shí)參。
如果上面定義的是整形 double power(int x ,int n),下面調用的是power(3.3,5)那么實(shí)參中3.3會(huì )被轉換成3,一部分數據丟失了。
聲明:本網(wǎng)站尊重并保護知識產(chǎn)權,根據《信息網(wǎng)絡(luò )傳播權保護條例》,如果我們轉載的作品侵犯了您的權利,請在一個(gè)月內通知我們,我們會(huì )及時(shí)刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學(xué)習?shū)B(niǎo). 頁(yè)面生成時(shí)間:3.795秒