簡介:ref和out是c#開發中經常使用的關鍵字,所以作為乙個.net開發,必須知道如何使用這兩個關鍵字.
1、相同點
ref和out都是按位址傳遞,使用後都將改變原來引數的數值。
2、ref關鍵字
(1)、使用ref關鍵字的注意點:
i、方法定義和呼叫方法都必須顯式使用 ref 關鍵字
ii、傳遞到 ref 引數的引數必須初始化,否則程式會報錯
iii、通過ref的這個特性,一定程度上解決了c#中的函式只能有乙個返回值的問題
(2)、**示例:
usingsystem;
using
system.collections.generic;
using
system.linq;
using
system.text;
using
system.threading.tasks;
namespace
,b:", a, b);//
輸出:72和6說明傳入fun方法是a和b的引用
}
static
void fun(ref
int a, ref
intb) }}
(2)、out關鍵字
(1)、使用out關鍵字的注意點:
i、方法定義和呼叫方法都必須顯式使用 out關鍵字
ii、out關鍵字無法將引數值傳遞到out引數所在的方法中,只能傳遞引數的引用(個人理解),所以out引數的引數值初始化必須在其方法內進行,否則程式會報錯
iii、通過out的這個特性,一定程度上解決了c#中的函式只能有乙個返回值的問題
(2)、**示例
using(3)、ref和out的區別system;
using
system.collections.generic;
using
system.linq;
using
system.text;
using
system.threading.tasks;
namespace
,b:", a, b);//
輸出:3和1說明out引數傳遞進去的是a和b的引用,輸出3說明a的引數值沒有傳入fun方法中
}
static
void fun(out
int a, out
intb)}}
通過上面的解析,ref和out最主要的區別是:
ref將引數的引數值和引用都傳入方法中,所以ref的引數的初始化必須在方法外部,進行,也就是ref的引數必須有初始化值,否則程式會報錯
out不會將引數的引數值傳入方法中,只會將引數的引用傳入方法中,所以引數的初始化工作必須在其對用方法中進行,否則程式會報錯
(4)、ref和out的使用需注意
i、
usingsystem;
using
system.collections.generic;
using
system.linq;
using
system.text;
using
system.threading.tasks;
namespace
public
void samplemethod(out
inti) }}
儘管 ref 和 out 在執行時的處理方式不同,但在編譯時的處理方式相同。因此,如果乙個方法採用 ref 引數,而另乙個方法採用 out 引數,則無法過載這兩個方法。例如,從編譯的角度來看,以下**中的兩個方法是完全相同的,因此將不會編譯上面的**
ii、
using但是,如果乙個方法採用 ref 或 out 引數,而另乙個方法不採用這兩個引數,則可以進行過載system;
using
system.collections.generic;
using
system.linq;
using
system.text;
using
system.threading.tasks;
namespace
public
void samplemethod(ref
inti) }}
C ref與out關鍵字解析
簡介 ref和out是c 開發中經常使用的關鍵字,所以作為乙個.net開發,必須知道如何使用這兩個關鍵字.1 相同點 ref和out都是按位址傳遞,使用後都將改變原來引數的數值。2 ref關鍵字 1 使用ref關鍵字的注意點 i 方法定義和呼叫方法都必須顯式使用 ref 關鍵字 ii 傳遞到 ref...
C ref與out關鍵字解析
ref和out都是按位址傳遞,使用後都將改變原來引數的數值。2 ref關鍵字 1 使用ref關鍵字的注意點 i 方法定義和呼叫方法都必須顯式使用 ref 關鍵字 ii 傳遞到 ref 引數的引數必須初始化,否則程式會報錯 iii 通過ref的這個特性,一定程度上解決了c 中的函式只能有乙個返回值的問...
C ref 與 out 關鍵字解析
簡介 ref和out是c 開發中經常使用的關鍵字,所以作為乙個.net開發,必須知道如何使用這兩個關鍵字.1 相同點 ref和out都是按位址傳遞,使用後都將改變原來引數的數值。2 ref關鍵字 1 使用ref關鍵字的注意點 i 方法定義和呼叫方法都必須顯式使用 ref 關鍵字 ii 傳遞到 ref...