1樓:
沒什麼太大區別。。
乙個用關鍵字ref標示,乙個用out標示。
牽扯到資料是引用型別還是值型別。
一般用這兩個關鍵字你是想呼叫乙個函式將某個值型別的資料通過乙個函式後進行更改。傳out定義的引數進去的時候這個引數在函式內部必須初始化。否則是不能進行編譯的。
ref和out 都是傳遞資料的位址,正因為傳了位址,才能對源資料進行修改。
一般情況下不加ref或者out的時候,傳值型別的資料進去實際上傳進去的是源資料的乙個副本,也就是在記憶體中新開闢了一塊空間,這裡面存的值是與源資料相等的,這也就是為什麼在傳值型別資料的時候你如果不用return是無法修改原值的原因。但是你如果用了ref,或者out,這一切問題都解決了,因為他們傳的是位址。
out比起ref來說,還有乙個用法就是可以作為多返回值來用,都知道函式只能有乙個返回值,c#裡,如果你想讓乙個函式有多個返回值,那麼out能很容易解決。
2樓:匿名使用者
引用引數以ref為關鍵字,這種引數是要在呼叫之前就初始化的。這引數一般情況下是從外部向內部傳遞數值的時候使用,對於託管**加ref和不加基本相同,但是對於託管**就有所區別。
輸出引數以out為關鍵字,這種引數不需要輸入確定的值,實際的物件是在方法內部初始化,由方法內部給這種引數賦值。一般是呼叫該方法之後,需要方法輸出一些資料的時候使用。因為有時候方法的返回值可能用作他用,而這時還想讓方法輸出其他的資料,就可以使用out引數了。
3樓:
引用引數:以關鍵字ref定義,採用引用傳遞
輸出型引數:以關鍵字out定義,採用引用傳遞,其實參可以不進行初始化
c#中 引用引數與輸出引數的功能分別是?有什麼區別?分別在什麼時候使用?
4樓:秦倫甘卿
out(c#
參考)更新:2023年11
月out
關鍵字會導致引數通過引用來傳遞。這與
ref關鍵字類似,不同之處在於
ref要求變數必須在傳遞之前進行初始化。若要使用out引數,方法定義和呼叫方法都必須顯式使用out關鍵字。例如:
c#複製**
class
outexample
static
void
main()
}儘管作為
out引數傳遞的變數不必在傳遞之前進行初始化,但需要呼叫方法以便在方法返回之前賦值。
ref和
out關鍵字在執行時的處理方式不同,但在編譯時的處理方式相同。因此,如果乙個方法採用
ref引數,而另乙個方法採用
out引數,則無法過載這兩個方法。例如,從編譯的角度來看,以下**中的兩個方法是完全相同的,因此將不會編譯以下**:
c#複製**
class
cs0663_example
public
void
samplemethod(ref
inti)
}但是,如果乙個方法採用
ref或
out引數,而另乙個方法不採用這兩類引數,則可以進行過載,如下所示:
c#複製**
class
outoverloadexample
public
void
samplemethod(out
inti)
}屬性不是變數,因此不能作為
out引數傳遞。
5樓:魚同書昝念
其實不用想的太複雜,簡單點想
引用引數,ref,比如
public
intfun(ref
intk);這樣的函式,你想在函式體內修改引數k的值,就這樣用,值型別的話就這樣用吧,如果引數是乙個物件,就不用這個ref了,其實意思就是傳位址進去,讓你進行操作
而輸出引數,out,就是可以傳入沒有初始化的引數。ref就是必須初始化的
out可以在內部進行初始化,而且一定要初始化,這個要注意就比如你傳入乙個沒有初始化的值型別的資料,就可以用out這樣的方法兩個的區別就是,ref要初始化,另乙個不用不過兩個都可以在內部修改他的值
具體什麼時候用,ref主要還是對於值型別
out可以處理乙個沒有初始化的陣列,這個比較有用你再看看別人說的,總結下吧
6樓:龍有福沈胭
沒什麼太大區別。。
乙個用關鍵字ref標示,乙個用out標示。
牽扯到資料是引用型別還是值型別。
一般用這兩個關鍵字你是想呼叫乙個函式將某個值型別的資料通過乙個函式後進行更改。傳out定義的引數進去的時候這個引數在函式內部必須初始化。否則是不能進行編譯的。ref和out
都是傳遞資料的位址,正因為傳了位址,才能對源資料進行修改。
一般情況下不加ref或者out的時候,傳值型別的資料進去實際上傳進去的是源資料的乙個副本,也就是在記憶體中新開闢了一塊空間,這裡面存的值是與源資料相等的,這也就是為什麼在傳值型別資料的時候你如果不用return是無法修改原值的原因。但是你如果用了ref,或者out,這一切問題都解決了,因為他們傳的是位址。
out比起ref來說,還有乙個用法就是可以作為多返回值來用,都知道函式只能有乙個返回值,c#裡,如果你想讓乙個函式有多個返回值,那麼out能很容易解決。
c#中 引用引數與輸出引數的功能分別是?有什麼區別?分別在什麼時候使用?
7樓:定復
其實不用想的太複雜,簡單點想
引用引數,ref,比如 public int fun(ref int k);這樣的函式,你想在函式體內修改引數k的值,就這樣用,值型別的話就這樣用吧,如果引數是乙個物件,就不用這個ref了,其實意思就是傳位址進去,讓你進行操作
而輸出引數,out,就是可以傳入沒有初始化的引數。ref就是必須初始化的
out可以在內部進行初始化,而且一定要初始化,這個要注意就比如你傳入乙個沒有初始化的值型別的資料,就可以用out這樣的方法兩個的區別就是,ref要初始化,另乙個不用不過兩個都可以在內部修改他的值
具體什麼時候用,ref主要還是對於值型別
out可以處理乙個沒有初始化的陣列,這個比較有用你再看看別人說的,總結下吧
8樓:
out(c# 參考)
更新:2007 年 11 月
out 關鍵字會導致引數通過引用來傳遞。這與 ref 關鍵字類似,不同之處在於 ref 要求變數必須在傳遞之前進行初始化。若要使用 out 引數,方法定義和呼叫方法都必須顯式使用 out 關鍵字。
例如:c# 複製**
class outexample
static void main()
}儘管作為 out 引數傳遞的變數不必在傳遞之前進行初始化,但需要呼叫方法以便在方法返回之前賦值。
ref 和 out 關鍵字在執行時的處理方式不同,但在編譯時的處理方式相同。因此,如果乙個方法採用 ref 引數,而另乙個方法採用 out 引數,則無法過載這兩個方法。例如,從編譯的角度來看,以下**中的兩個方法是完全相同的,因此將不會編譯以下**:
c# 複製**
class cs0663_example
public void samplemethod(ref int i)
}但是,如果乙個方法採用 ref 或 out 引數,而另乙個方法不採用這兩類引數,則可以進行過載,如下所示:
c# 複製**
class outoverloadexample
public void samplemethod(out int i)
}屬性不是變數,因此不能作為 out 引數傳遞。
9樓:匿名使用者
ref 是針對基本資料型別,而又想傳引用的做法,我感覺主要用於呼叫非託管**時。其他時候不想用它。
out類似,但編譯器會加以限制,例如:檢查到沒有賦值的out不允許編譯通過。
簡述c#中方法的值引數,引用引數和輸出引數
10樓:春秀榮羽壬
引用引數是說ref吧,輸出引數是說out吧都是為了能讓方法多返回乙個值
如ref的引數要求使用前一定要初始化,在方法中改變後,這種改變會保留,相當於多了乙個返回值
out引數要求使用前一定要出事話,但是在方法內部要對該引數重新初始化,再使用,也就是說,外部的初始化對內部沒有影響。out引數會保留在內部方法做出的改變
值引數,就是傳遞的值的拷貝啊內部對該值做的任何改變不會保留到外部
簡述c#中方法的值引數,引用引數和輸出引數
11樓:log琥珀
引用引數是說ref吧,輸出引數是說out吧都是為了能讓方法多返回乙個值
如 ref的引數要求使
用前一定要初始化,在方法中改變後,這種改變會保留,相當於多了乙個返回值
out引數要求使用前一定要出事話,但是在方法內部要對該引數重新初始化,再使用,也就是說,外部的初始化對內部沒有影響。out引數會保留在內部方法做出的改變
值引數,就是傳遞的值的拷貝啊內部對該值做的任何改變不會保留到外部
c#中的引用引數和輸出引數的適用場景?
12樓:匿名使用者
如果想通過呼叫乙個函式改變實參的值,就使用引用引數;
如果想通過呼叫乙個函式為未初始化的實參賦值(初始化實參),就使用輸出引數。
13樓:陽光的凌寶寶
穩定電壓,這個用電戶一般
c陣列可以通過值引數和引用引數兩種方式傳遞給函式”的說法對否
不對。int,char或者自定義的類可以通過值引數和引用引數兩種方式傳遞給函式,陣列不行。陣列是兩種指標傳遞 void sort int a 對於指標a來說是值傳遞,對於陣列來說是指標傳遞 void sort int a 100 這種方法類似於引用,但實質上還是指標傳遞 謝3哥 當然對了 1,引用 ...
c 中的引用到底都有什麼用處,請問C 中的引用符號“ ”到底怎麼使用?
比如int f int a 當你如下呼叫時 int b f b 編譯器會把b的值賦給a,在函式體內操作a 而如果函式定義為 int f int a 當你呼叫時,沒有這個賦值的過程,因為此時a是實參的別名,相當於直接操作了實參b 從這個例子可以看到引用的兩個特性 1 節約空間,少了一個實參賦值給形參的...
資料結構中何時用引用引數,何時用賦值引數
大姐說大事 在形參表中以符號 開始的引數即為引用引數。如果一個形參是引用引數,呼叫部位將把實參的地址傳遞給子程式。子程式可以改變傳遞給引用引數的任何實參,因為子程式操作的是真正的變數,而不是它的副本。一般情況下,對於任意一個類a,如果程式設計師不顯示的宣告和定義上述函式,c 編譯器將會自動的為a產生...