可以理解為類似的傳址引用,同時還有out。
在函式需要外部傳入一個變數名,然後在程式內部可以將這個值進行修改,典型的傳址引用!在定義時必要加ref或out說明!
public void MethodA(out string s )
{
s = "1";
}
呼叫時,應該先宣告一個字元變數。
string temp;
MethodA(out temp);
此時可以列印temp的值會變作"1";
而ref與out基本是類同的,如果在程式中引用原值的話,必須使用ref防止傳入未初始化的值。
public void MethodB(ref int s)
s = s*s;
因為該函式要使用形參的原值,所以這裡必須使用ref宣告,不要使用out宣告。
使用時,
int temp = 8;
MethodB(ref temp);
列印temp的值會變為64。
ref因為對原值進行了引用,所以ref要求傳入的一定是一個初始化後的值,不能是未初始化的值。
int temp;
//原則上這樣是會錯的,但這裡我使用了一個int,由於在宣告時int temp與int temp =0 是等價的,所以不會出錯,但如果是字串,使用這種方式完全是可以報錯的!因為string temp與string temp ="";是不等價的,你也可理解為必須賦值後才可以使用。
public void MethodC(ref string s)
.......
MethodC(ref temp);//這種就是錯誤的方式。ref要求必須形參已經賦值(初始化)。
string temp = "";
MethodC(ref temp);//這種方式就是正確的。
我們定義成員方法時,如果有引用原值使用必須使用ref,防上對方傳入一個未初始化的值,引發程式錯誤,而沒有必要對形參的值有要求時,則儘量使用out,防止呼叫時增加客戶端程式碼量。
可以理解為類似的傳址引用,同時還有out。
在函式需要外部傳入一個變數名,然後在程式內部可以將這個值進行修改,典型的傳址引用!在定義時必要加ref或out說明!
public void MethodA(out string s )
{
s = "1";
}
呼叫時,應該先宣告一個字元變數。
string temp;
MethodA(out temp);
此時可以列印temp的值會變作"1";
而ref與out基本是類同的,如果在程式中引用原值的話,必須使用ref防止傳入未初始化的值。
public void MethodB(ref int s)
{
s = s*s;
}
因為該函式要使用形參的原值,所以這裡必須使用ref宣告,不要使用out宣告。
使用時,
int temp = 8;
MethodB(ref temp);
列印temp的值會變為64。
ref因為對原值進行了引用,所以ref要求傳入的一定是一個初始化後的值,不能是未初始化的值。
int temp;
MethodB(ref temp);
//原則上這樣是會錯的,但這裡我使用了一個int,由於在宣告時int temp與int temp =0 是等價的,所以不會出錯,但如果是字串,使用這種方式完全是可以報錯的!因為string temp與string temp ="";是不等價的,你也可理解為必須賦值後才可以使用。
public void MethodC(ref string s)
{
.......
}
string temp;
MethodC(ref temp);//這種就是錯誤的方式。ref要求必須形參已經賦值(初始化)。
string temp = "";
MethodC(ref temp);//這種方式就是正確的。
我們定義成員方法時,如果有引用原值使用必須使用ref,防上對方傳入一個未初始化的值,引發程式錯誤,而沒有必要對形參的值有要求時,則儘量使用out,防止呼叫時增加客戶端程式碼量。