在C 中關於傳遞引數ref和out分別有什麼區別

2022-04-12 06:36:27 字數 4103 閱讀 2058

2013-05-25ref

(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

inti) }

備註 屬性不是變數,因此不能作為

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

inti) }

備註 屬性不是變數,因此不能作為

out引數傳遞。

有關傳遞陣列的資訊,請參見使用

ref 和 out

傳遞陣列。

示例 當希望方法返回多個值時,宣告

out 方法很有用。使用 out 引數的方法仍然可以將變數用作返回型別(請參見 return),但它還可以將乙個或多個物件作為 out 引數返回給呼叫方法。此示例使用 out

在乙個方法呼叫中返回三個變數。請注意,第三個引數所賦的值為 null。這樣便允許方法有選擇地返回值。

class outreturnexample

static

void main() }

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

inti)

} 但是,如果乙個方法採用

ref 或 out

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

class

refoutoverloadexample

public

void samplemethod(ref

inti)

}備註

屬性不是變數,因此不能作為

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

inti)

} 但是,如果乙個方法採用

ref 或 out

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

class

refoutoverloadexample

public

void samplemethod(out

inti)

}備註

屬性不是變數,因此不能作為

out引數傳遞。

有關傳遞陣列的資訊,請參見使用

ref 和 out

傳遞陣列。

示例 當希望方法返回多個值時,宣告

out 方法很有用。使用 out 引數的方法仍然可以將變數用作返回型別(請參見 return),但它還可以將乙個或多個物件作為 out 引數返回給呼叫方法。此示例使用 out

在乙個方法呼叫中返回三個變數。請注意,第三個引數所賦的值為 null。這樣便允許方法有選擇地返回值。

class

outreturnexample

static

void

main()

}

ref和out 傳遞引數 C

1.引數傳遞預設都是傳遞棧空間裡面儲存的內容 2.如果新增了ref那麼傳遞的都是棧空間位址,而不再是棧空間裡面的內容 3.如果新增了out,那麼傳遞的也是棧空間的位址 1 寫乙個方法計算乙個int型別陣列中每個元素的總和以及最大值和最小值 2 3 4 5 6 7static void gatvalu...

關於C 中的ref和out引數的說明

看下面的例子 using system class test static void swap int x,int y static void main j i,j swap i,j console.writeline i j i,j 程式經編譯後執行輸出 i 2,j 1 i 2,j 1 這是csd...

C 中的 Out 和 Ref 引數

out和ref引數 經常用來通過方法傳遞引數來獲取值,當您的方法不只有乙個返回值的時候,這兩個引數就發揮作用了。ref是傳遞引數的位址,out是返回值,兩者有一定的相同之處,不過也有不同點。在這篇文章裡,我將解釋如何在c 應用中使用這兩個引數。1 out 引數 out方法引數關鍵字使方法引用傳遞到方...