<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      【設計原則和建議】 方法返回值

      基本規則
       

      1.不要忽略返回值;如果不想處理返回值,就選擇沒有返回值的方法(如果有的話)
       

      2.公開給第三方的方法返回值類型在滿足功能的情況下,盡量選擇父類和接口,而不是具體類型 (面向對象的封裝性)

      • 這點可能有很大的爭議,我區分為對外的和對內的方法 (對內請看No.3)
      • 返回子類,意味要把子類的細節也暴露出去
      • 使用接口返回具體類型,就不用暴露細節了
          public class ClassP //請忽略嵌套類的設計問題
      {
      protected internal class User : IUser//我不想暴露User類的細節給外部 注:也可能是private等的訪問性
      {
      public void ResetMoney() { }
      }
      public IUser GetUser()
      {
      return new User();
      }
      }
      public interface IUser
      {

      }
      class Program
      {
      static void Main(string[] args)
      {
      ClassP p = new ClassP();
      var user = p.GetUser();
      }
      }

      • 下面又是一個返回具體類型的悲劇(一般不建議直接暴露內部集合成員,而是使用Clone等方法返回副本,或者使用 IEnumerable<T>)
          class Program
      {
      static void Main(string[] args)
      {
      ClassS s = new ClassS();
      var list = s.GetList();
      s.PrintListCount();
      list.Add("string");
      s.PrintListCount();//這里輸出1個, ClassS的內部變量被改變了,破壞了封裝性
      }
      }
      public class ClassS
      {
      private List<string> list = new List<string>();
      public List<string> GetList()//bad
      {
      return list;
      }
      public IEnumerable<string> GetList2()//good
      {
      return list;
      }
      public void PrintListCount()
      {
      Console.WriteLine(list.Count());
      }
      }
      • 有時候為了保持行為的一致性而選擇返回父類 ( WebRequest HttpWebRequest.Create(string requestUriString);)

      3.內部方法(如private)盡可能選擇詳細類型

      • 調用方得到更多細節信息,可以做更多的操作
      • 除非是設計上使用了工廠模式等設計方式,那只能返回接口或者父類了 (返回類型是父類,實際類型還是子類)


      4.建議將返回值存在本地變量以后再使用

      • 鏈式表達式是例外情況

      5.將接口作為返回值,往往意味著該設計希望解耦合


      6.別為了方便或者是懶惰把方法返回值都弄成Object


      7.優先使用返回值,而不是ref和out參數 


      8.參數類型和方法名保持一致

      • 如果是鏈式表達式,自然返回值類型和類本身保持一致

       IQueryable<ClassX> list = null;//只是為了演示  所以沒有值
      var data = list.OrderBy(p => p.Age).Where(p => p.Type == 1).ToList();




      返回值和異常


      1.為什么選擇異常

      • 一般情況下,在內部使用的方法中,使用異常來提示執行錯誤,而不是用返回值
      • 所謂內部使用的意思是:該方法不是公開給第三方使用的(例如 組件開發中的public方法, 例如WebService 等)
      • 異常不影響正常邏輯代碼的閱讀,也不影響返回值本身的意義(例如 你不需要聲明一個返回值的類 同時返回 狀態碼 異常信息 和真正的數據)
      • 相比于返回值,異常的功能信息更為豐富,例如攜帶堆棧跟蹤等
      • 相比于返回值,異常的功能更為強大, 例如通過 AppDomain.CurrentDomain.UnhandledException 處理所有未處理的異常
      • 使用異常來告知執行失敗和.net類庫本身保持行為一致 例如: System.IO.File.WriteAllText() ;
      • 如果使用返回值類通知執行失敗,用戶容易忽略返回值,如下所示
                static void Main()
        {
        GoGoGo();//沒注意到返回值是false
        //繼續....
        }

        static bool GoGoGo()
        {
        return false;
        }
         


      2.為什么選擇返回值

      • 外部使用方法中應該使用返回值而不是異常,包括但不僅限于Socket,HTTP,跨語言,跨進程的通信
      • asp.net本身 還有WCF 都提供了全局的handler將錯誤轉化為返回的html或者xml (就是我們經常見到的黃色錯誤頁面)  在程序內部使用異常,準備返回的時候使用統一的handler處理為返回值是一個較好的實踐
      • 性能問題; 就是為了性能問題.net類庫提供了 Int.TryPrase 方法



      返回值類型和值


      1. void無返回值

      • 不要為了增加返回值而增加返回值,一個東西它如果邏輯上不需要返回值那么就應該設計為void


      2.Int 和其他所有的數值類型

      • 在數據邏輯上只能是正整數0的時候,使用-1 作為條件不成立的值. 例如String.IndexOf  返回-1代表字符串不存在
      • 在數據邏輯上是整數的時候,使用 Int?   (Nullable<int>) 并且值為null 作為條件不成立.  例如  int? GetUserId() 用戶不存在的時候返回Null (更推薦的方法是先調用方法判斷用戶是否存在,  然后調用 int GetUserId())


      3.String

      • 將null作為條件不成立或者無數據的表示
      • 傳遞給表現層的返回值考慮返回空字符串 "" (String.Empty) 優先于null   (例如在asp.net頁面上直接調用 s.Trim() 等方法會比較方便,不需要判斷null值)  我個人覺得這不算一個嚴謹的設計 但是會方便編碼


      4.所有普通的Class (非集合類)

      • 將null作為條件不成立或者無數據的表示


      5.集合類

      • 將集合類型不為null但是數量為0的集合,作為條件不成立或者無數據的表示


      6.泛型

      • 將Default(T) 作為條件不成立或者無數據的表示

      部分內容引用自MSDN,FxCop 和其他第三方文章..

      因為本人水平有限,如有遺漏或謬誤,還請各位高手指正


      posted on 2011-10-14 19:53  聽說讀寫  閱讀(3135)  評論(6)    收藏  舉報

      導航

      主站蜘蛛池模板: 亚洲国产欧美在线人成AAAA| 一本精品99久久精品77| 国产区免费精品视频| 91福利视频一区二区| 国精品午夜福利不卡视频| 乱人伦人妻系列| 日日麻批免费40分钟无码| 真实单亲乱l仑对白视频| 内射老阿姨1区2区3区4区| 日本一区二区三区在线看| 黑人巨大精品oideo| 日本欧美大码a在线观看| 激情综合网激情综合网五月 | 欧美在线一区二区三区精品| 亚洲欧洲日产国无高清码图片| 无码福利一区二区三区| 精品午夜福利在线视在亚洲| 不卡一区二区国产精品| 小嫩模无套内谢第一次| 国产午夜精品理论大片| 中文字幕成人精品久久不卡| 人妻教师痴汉电车波多野结衣| 好紧好滑好湿好爽免费视频| 特黄少妇60分钟在线观看播放| 日本无遮挡真人祼交视频| 久久天堂综合亚洲伊人HD妓女| 欧美日本一区二区视频在线观看 | 国产熟睡乱子伦午夜视频| 国产精品亚欧美一区二区三区| 久久精品日日躁夜夜躁| 日本新janpanese乱熟| 中文字幕亚洲综合第一页| 中文字幕亚洲人妻一区| 中文字幕在线亚洲日韩6页| 久久丫精品久久丫| 人妻系列中文字幕精品| 日韩人妻久久精品一区二区| 国产99在线 | 亚洲| 另类 专区 欧美 制服| 精品国产精品中文字幕| 看亚洲黄色不在线网占|