//函數定義 函數
public int Test(int i, ref string str1, out string str2) ui
{
if (1 == i)
{
str1 = "liao";string
//str1 = null;編譯
str2 = "huihui";變量
//str2 = null;
return 0;
}錯誤
else
{ return
//這裏對ref修飾的str1的操做能夠不作任何處理,則在函數調用時取值
str2 = "hello world";
return 1;
}參數
}
//函數調用
main()
{
int i = Convert.ToInt32(textBox1.Text.ToString());
//ref須要初始化
//string str1; //錯誤,編譯通不過
//string stri = null;
string str1 = "liaohuihui";
//out不須要初始化
//string str2; //這裏對out修飾的str2的操做能夠僅僅只作聲名
//string str2 = null;
string str2 = "liaohuihui";
int j = ConnectMySql.Test(i, ref str1, out str2);
MessageBox.Show(str1);
MessageBox.Show(str2);
MessageBox.Show(Convert.ToString(j));
}
以ref修飾的變量在定義的時候要求不嚴格, 三種狀況都是能夠的:1.賦值;2.初始化爲空;3.不作任何處理
但在調用的時候較爲嚴格,必須賦值(空值也可)。要說明的是:只要他在定義的時候被賦值過(包括空值),調用函數時都取定義時所賦的值,可是若是在定義時不作任何處理,則取調用時所賦的值。
以out修飾的變量在定義的時候要求較爲嚴格 僅兩種狀況:1.賦值;2.初始化爲空
但在調用的時候要求相對寬鬆,不須要任何賦值或初始化爲空操做,輸出的結果也就只能取在定義的時候所賦的值。
既然是以參數做爲返回值通常都在定義時賦值,以上辨析爲了完全弄清兩者的區別。
以上是Test後的結果,若有錯誤之處,敬請幫忙修正。