00110 方法和傳遞參數_ref和out的用法_第1頁
00110 方法和傳遞參數_ref和out的用法_第2頁
00110 方法和傳遞參數_ref和out的用法_第3頁
00110 方法和傳遞參數_ref和out的用法_第4頁
00110 方法和傳遞參數_ref和out的用法_第5頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、陳利娥 博文ref和out的應用要深刻理解ref和out的應用,不僅從語法的角度,更要從面向對象【OO】的角度去理解和把握。一、首先應該真正理解“方法”方法:1、語法的角度:略2、OO的角度:方法是對現實行為或操作的一種模擬比如:學生的上課,考試,面試等行為都可以用方法來模擬,【方法包含普通方法,虛方法,抽象方法,】二、這里我們要重點討論方法的返回值1、有些方法不需要返回值,比如:實例1:我今天心情好,下班后去逛超市,但是不買任何東西實例1分析:方法構成不需要花錢方法無參數不買任何東西方法無返回值實例1可以用以下方法來模擬void 逛超市()/隨意逛逛2、有些方法需要返回值也需要參數,比如:實

2、例2:我今天下班后去超市買一箱牛奶實例2分析:方法構成需要花*出*錢方法有參數買*回*一箱牛奶方法有返回值實例2可以用以下方法來模擬int 逛超市(double 錢)/花*出*錢 return 一箱牛奶;三、ref ,out的用法對于實例2:我今天下班后去超市買一箱牛奶實際我們有很多模擬的方式,如:方式1,方式2,方式3方式1:用*有*參數*有*返回值的方法來模擬,如上方法構成需要花*出*錢方法有參數,用一個參數默認參數,傳入值買*回*一箱牛奶方法有返回值用return返回值,傳出值方式2:用*有*參數*沒有*返回值的方法來模擬,讓函數增加一個out參數,讓這個參數起到返回值的作用即傳出值。方

3、法構成需要花*出*錢方法有參數, 一個為默認參數 傳入值 另一個為out參數傳出值買*回*一箱牛奶方法有返回值不用return返回值,而用out參數返回值,傳出值實例2還可以用以下方法來模擬:void 逛超市(float 錢, out int 買的東西)/花*出*錢 買的東西= 一箱牛奶;方式3:方式2模擬這件事情用了兩個參數,能不能少用一個參數呢。只用一個參數既起到傳入也起到傳出值的作用。OK!選用ref 參數方法構成需要花*出*錢方法有參數, 只有一個ref參數傳入值和傳出值買*回*一箱牛奶方法有返回值不用return返回值,而用ref參數返回值,傳出值實例2還可以用以下方法來模擬:voi

4、d 逛超市(ref double 錢_買的東西)/花*出*錢 錢_買的東西= 一箱牛奶;四、ref ,out何時用,用在哪里1、是一種可選的解決方案:做一件事情,往往有很多方法可以選擇,如果一個方法需要返回值,我們可以選擇ref或out參數,如上面的例子。如果只需要方法傳出值,選out參數即可如果需要方法既傳入值也傳出值,選ref參數2、是一種最好的解決方案:比如:某人面試了一家單位,他不但想知道是否要他,還想知道要他或不要他的原因再如:連接數據庫,想知道連接是否成功,如果連接不成功,還想知道不成功的原因生活中實例多如牛毛:去超市買東西,交給收款員貨幣,你得到的不僅是要買的物品,還有找零,贈品

5、,總之,當一個函數需要返回多種不同類型值的時候,往往可以使用ref ,out參數,如bool Con_DB_Cle(string conStr,ref string why) try / why="" return true; catch(Exception e) / why= e.ToString(); return false; 五、ref ,out用在哪里,讓我們看看類庫,類庫用的不多啊!例子1:System.:.Uri.TryCreate 方法:.: 使用指定基和相對 Uri 實例創建一個新的 Uri。如果成功創建了 Uri,則方法返回值為 true;否則為 fal

6、se。public static bool TryCreate(Uri baseUri,Uri relativeUri,out Uri result /此方法返回時,包含從 baseUri 和 relativeUri 構造的 Uri)public static bool TryCreate(string uriString,UriKind uriKind,out Uri result) 例子2:protected override bool System.Data.SqlClient.SqlDataAdapter .GetBatchedRecordsAffected(int commandId

7、entifier, out int recordsAffected, out System.Exception error)六、ref ,out的使用原則【依據VS.NET2008 msdn>.NET Framework 開發人員指南】方法參數可以通過值,通過引用傳遞,也可以作為輸出參數傳遞。通過值傳遞參數時,方法獲取調用方數據的副本,但不能改變調用方的數據副本。通過引用傳遞參數時,方法獲取指向調用方數據的指針。此數據與調用方共享。如果方法對引用參數做出更改,則這些更改是對調用方的數據進行的。使用引用參數時,方法可以使用數據的初始狀態。輸出參數與引用參數類似,不同之處在于,輸出參數以獨占

8、方式用于向調用方返回數據,而引用參數可用于將數據傳入方法,也可用于從方法中接收數據。 避免使用輸出參數或引用參數。使用定義輸出參數或引用參數的成員需要開發人員理解指針、值類型和引用類型之間的細微差別以及輸出參數和引用參數之間的初始化差異。不要通過引用傳遞引用類型。通過引用傳遞一個對象使方法能夠用不同的實例替換該對象。在大多數情況下,方法應使用提供的對象,而不應將其替換。對于此規則,有一些少量的例外(例如,可用于交換引用的方法)。 部分版權所有 2005 Microsoft Corporation。保留所有權利。 部分版權所有 Addison-Wesley Corporation。保留所有權利。 有關設計指南的更多信息,請參見 Krzysztof Cwalina 和 Brad Abrams 編著、Addison-Wesley 于 2005 年出版的“Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries”(框架設計指南:可重用 .NET 庫的約定、術語和模式)。七、ref ,out的區別?經典面試題ref ,out的區別?簡記1作用ref參數既可以由方法調用端向方法傳入值,也可以由方法向方法調用端

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論