ref和out的使用

2021-04-09 06:33:17 字數 1831 閱讀 5560

c# 程式設計師參考 

ref(c# 參考) 

ref 關鍵字使引數按引用傳遞。其效果是,當控制權傳遞**用方法時,在方法中對引數所做的任何更改都將反映在該變數中。若要使用 ref 引數,則方法定義和呼叫方法都必須顯式使用 ref 關鍵字。例如:

class refexample

static void main()

}

傳遞到 ref 引數的引數必須最先初始化。這與 out 不同,out 的引數在傳遞之前不需要顯式初始化。(請參見 out。)

儘管 ref 和 out 在執行時的處理方式不同,但它們在編譯時的處理方式是相同的。因此,如果乙個方法採用 ref 引數,而另乙個方法採用 out 引數,則無法過載這兩個方法。例如,從編譯的角度來看,以下**中的兩個方法是完全相同的,因此將不會編譯以下**:

class cs0663_example

public void samplemethod(out int i) }

但是,如果乙個方法採用 ref 或 out 引數,而另乙個方法不採用這兩類引數,則可以進行過載,如下所示:

class refoutoverloadexample

public void samplemethod(ref int i) }

備註

屬性不是變數,因此不能作為 ref 引數傳遞。

有關傳遞陣列的資訊,請參見使用 ref 和 out 傳遞陣列。

示例

按引用傳遞值型別(如上所示)是有用的,但是 ref 對於傳遞引用型別也是很有用的。這允許被呼叫的方法修改該引用所引用的物件,因為引用本身是按引用來傳遞的。下面的示例顯示出當引用型別作為 ref 引數傳遞時,可以更改物件本身。

class refrefexample

static void main()

}out(c# 參考) 

out 關鍵字會導致引數通過引用來傳遞。這與 ref 關鍵字類似,不同之處在於 ref 要求變數必須在傳遞之前進行初始化。若要使用 out 引數,方法定義和呼叫方法都必須顯式使用 out 關鍵字。例如:

class outexample

static void main()

} 儘管作為 out 引數傳遞的變數不需要在傳遞之前進行初始化,但需要呼叫方法以便在方法返回之前賦值。

ref 和 out 關鍵字在執行時的處理方式不同,但在編譯時的處理方式相同。因此,如果乙個方法採用 ref 引數,而另乙個方法採用 out 引數,則無法過載這兩個方法。例如,從編譯的角度來看,以下**中的兩個方法是完全相同的,因此將不會編譯以下**:

class cs0663_example

public void samplemethod(ref int i)

} 但是,如果乙個方法採用 ref 或 out 引數,而另乙個方法不採用這兩類引數,則可以進行過載,如下所示:

class refoutoverloadexample

public void samplemethod(out int i)

} 備註

屬性不是變數,因此不能作為 out 引數傳遞。

有關傳遞陣列的資訊,請參見使用 ref 和 out 傳遞陣列。

示例

當希望方法返回多個值時,宣告 out 方法很有用。使用 out 引數的方法仍然可以將變數用作返回型別(請參見 return),但它還可以將乙個或多個物件作為 out 引數返回給呼叫方法。此示例使用 out 在乙個方法呼叫中返回三個變數。請注意,第三個引數所賦的值為 null。這樣便允許方法有選擇地返回值。

class outreturnexample

static void main()

}

使用ref和out引數

ref型別引數側重修改,out型別引數側重輸出 ref在傳入值之前必須先初始化 out在函式內,函式結束之前,即傳出值之前初始化.eg protected void page load object sender,eventargs e int indexref 1 testref ref inde...

使用ref和out引數

通過ref和out關鍵字,可以以引用的方式傳遞任何型別的值。這樣做,將允許改變呼叫過程中使用的實參值。在研究ref和out的機制之前,首先有必要理解為什麼需要以引用方式來傳遞值型別。通常有兩個原因 使方法能改變其實參的值或者允許方法有多個返回值。ref引數修飾符使得c 可以建立按引用呼叫,而不是按值...

C CLI的Ref和Out使用

最近在搞c cli,發現經常需要涉及ref和out的使用,因此記錄下。c cli 是一種.net語言,因此其可以像c 一樣使用ref和out為函式引數進行標識。首先我們看看ref,這個是表示對物件的位址進行傳遞,所以很簡單傳遞乙個位址符號即可 我們將這個方法引用到乙個c 專案中,可以看到vs幫我們加...