(例子來源於CSDN論壇)
class Program<br /> {<br /> //使用out後必須對變數賦值<br /> public void TestOut(out int x, out int y)<br /> {<br /> x = 1;<br /> y = 2;<br /> }<br /> //此時傳進來的值分別為x1:10,y1:11,輸出之後的x1的值為2 </p><p> public void TestRef(ref int x, ref int y)<br /> {<br /> //引用剪剪那句話傳進來的是豬,出來的可能是頭牛(很精闢!)<br /> x = 2;<br /> //這邊可以不對y賦值,而out那就不行了.</p><p> }<br /> static void Main(string[] args)<br /> {<br /> int x=10;<br /> int y=11;<br /> Program P1 = new Program();<br /> P1.TestOut(out x, out y); //out會清空原來變數的值<br /> Console.WriteLine("x={0},y={1}", x, y);<br /> //在使用之前ref必須對變數賦值<br /> int x1 = 10;<br /> int Y1 = 11;<br /> P1.TestRef(ref x1, ref Y1);<br /> Console.WriteLine("x1={0},y1={1}", x1, Y1);<br /> Console.ReadKey();<br /> }</p><p> //el可以把參數的數值傳遞進函數,<br /> //但是out是要把參數清空,就是說你無法把一個數值從out傳遞進去的,out進去後,參數的數值為空白,<br /> //所以你必須初始化一次。這個就是兩個的區別,或者說就像有的網友說的,rel是有進有出,out是只出不進。</p><p> }
以前不知道ref和out有個啥用,其實ref和out可以在不需要傳回值的情況下,傳遞值,
在有傳回值的方法裡,除了可以得到返回的值外,還可以得到方法裡面聲明的ref,和out參數的值
比喻如下的一個驗證方法,可以傳遞驗證的資訊,既返回了真假,又可以得到驗證的資訊
/// <summary><br /> ///檢查表單驗證資訊<br /> /// </summary><br /> private bool CheckFromInfo(ref string name)<br /> {</p><p> if (txt_leaveDate.Text == "")<br /> {<br /> name="請假日期不可為空";<br /> return false;<br /> }<br /> if (txt_name.Text == "")<br /> {<br /> name = "姓名不可為空";<br /> return false;<br /> }<br /> if (txt_writedate.Text == "")<br /> {<br /> name="申請日期不可為空";<br /> return false;</p><p> }<br /> string enddate = txt_leaveDate.Text;<br /> DateTime date = Convert.ToDateTime(enddate);<br /> DateTime now =Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd"));<br /> if (date < now)<br /> {<br /> name = "請假日期不能小於申請日期(填表日期)!";<br /> return false;<br /> }<br /> if (ddltype.SelectedItem.Text == "請選擇")<br /> {<br /> name = "請選擇請假類型!";<br /> return false;<br /> }<br /> return true;</p><p> }</p><p>//下面是調用<br /> string name=null;<br /> if (CheckFromInfo(ref name) == false)<br /> {</p><p> JScript.Alert(name,this.Page);//彈出提示訊息<br /> return;<br /> }
上面要是用out的話呢?在離開方法CheckFromInfo()之前.必須在方法裡面為name賦值,你要保證在此方法出來的時候.
name是有值的.不然人家叫out幹嗎?out嘛.你不讓人家帶東西出來,不給面試,人家當然不樂意了
用ref的話,就不必了.如果在方法裡面ref name,name的值 沒有改變的話呢.那麼你在CheckFromInfo()方法外邊申明的值就是它最終的值了,而out你在外邊不論聲明什麼值,它都會清空的,因為它要out嘛,要帶自己的東西出來...
以上是我自己的一點見解,如果有錯誤,還望指正