2 回答

TA貢獻(xiàn)1797條經(jīng)驗 獲得超6個贊
這是一個引用傳遞L。原則一:當(dāng)一個方法(函數(shù))在使用out作為參數(shù)時,在方法中(函數(shù))對out參數(shù)所做的任何更改都將反映在該變量中。
原則二:當(dāng)希望方法返回多個值時,聲明 out 方法非常有用。使用 out 參數(shù)的方法仍然可以返回一個值。一個方法可以有一個以上的 out 參數(shù)。
原則三:若要使用 out 參數(shù),必須將參數(shù)作為 out 參數(shù)顯式傳遞到方法。out 參數(shù)的值不會傳遞到 out 參數(shù)。
原則四:不必初始化作為 out 參數(shù)傳遞的變量,因為out 參數(shù)在進(jìn)入方法(函數(shù))時后清空自己,使自己變成一個干凈的參數(shù),也因為這個原因必須在方法返回之前為 out 參數(shù)賦值(只有地址沒有值的參數(shù)是不能被.net接受的)。
原則五:屬性不是變量,不能作為 out 參數(shù)傳遞。
原則六:如果兩個方法的聲明僅在 out 的使用方面不同,則會發(fā)生重載。不過,無法定義僅在 ref 和 out 方面不同的重載。例如,以下重載聲明是有效的:
class MyClass
{
public void MyMethod(int i) {i = 10;}
public void MyMethod(out int i) {i = 10;}
}
而以下重載聲明是無效的:
class MyClass
{
public void MyMethod(out int i) {i = 10;}
public void MyMethod(ref int i) {i = 10;}
}

TA貢獻(xiàn)1834條經(jīng)驗 獲得超8個贊
out 關(guān)鍵字會導(dǎo)致參數(shù)通過引用來傳遞。這與 ref 關(guān)鍵字類似,不同之處在于 ref 要求變量必須在傳遞之前進(jìn)行初始化。若要使用 out 參數(shù),方法定義和調(diào)用方法都必須顯式使用 out 關(guān)鍵字。例如:class OutExample
{
static void Method(out int i)
{
i = 44;
}
static void Main()
{
int value;
Method(out value);
// value is now 44
}
盡管作為 out 參數(shù)傳遞的變量不需要在傳遞之前進(jìn)行初始化,但需要調(diào)用方法以便在方法返回之前賦值。
ref 和 out 關(guān)鍵字在運(yùn)行時的處理方式不同,但在編譯時的處理方式相同。因此,如果一個方法采用 ref 參數(shù),而另一個方法采用 out 參數(shù),則無法重載這兩個方法。但是,如果一個方法采用 ref 或 out 參數(shù),而另一個方法不采用這兩類參數(shù),則可以進(jìn)行重載。
示例:
當(dāng)希望方法返回多個值時,聲明 out 方法很有用。使用 out 參數(shù)的方法仍然可以將變量用作返回類型(請參見 return),但它還可以將一個或多個對象作為 out 參數(shù)返回給調(diào)用方法。此示例使用 out 在一個方法調(diào)用中返回三個變量。請注意,第三個參數(shù)所賦的值為 Null。這樣便允許方法有選擇地返回值。
class OutReturnExample
{
static void Method(out int i, out string s1, out string s2)
{
i = 44;
s1 = "I've been returned";
s2 = null;
}
static void Main()
{
int value;
string str1, str2;
Method(out value, out str1, out str2);
// value is now 44
// str1 is now "I've been returned"
// str2 is (still) null;
}
}
- 2 回答
- 0 關(guān)注
- 600 瀏覽
添加回答
舉報