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

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

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

      【設計原則和建議】 方法


      方法
        1.一個方法內的代碼不能超過30行.
      • 絕大部分方法都可以在30行內結束.
      • 這是一種強迫開發者優化設計和代碼的方式.
         
        2.什么樣的方法不應該拋出異常?
      • 靜態構造函數,拋出以后整個類型就再也無法使用了.
      • 構析函數.
      • 屬性的get方法 (有些類的設計會違背這個特性).
      • Dispose (理論上也不應該拋出異常,不過有些設計已經拋出了異常).
         
        3.還沒有實現的方法應該拋出NotImplementedException 異常.
       
        
        4.移除沒有被調用到的方法 .
       
        5.方法命名推薦Pascal命名.
      • 推薦動詞+名詞方式  例如 GetUser, DisableUser
      • 如果在類的實例方法上,推薦動詞做方法名  例如User.Create



      靜態方法和實例方法
       
        1.靜態方法應該是線程安全的
      •   調用方使用靜態方法(如Console.Write),調用方會預期靜態方法是線程安全的
              public static Dictionary<string, object> dict = new Dictionary<string, object>();
      public static ConcurrentDictionary<string, object> concurrentDict = new ConcurrentDictionary<string, object>();
      public static void Test1()
      {
      if (!dict.ContainsKey("key"))//線程不安全
      {
      dict["key"] = "value";
      }
      }
      public static void Test2()
      {
      concurrentDict["key"] = "value";//線程安全,
      }
        
        
        2.如果一個方法沒有使用到this,那么考慮聲明為靜態方法
       
        3.基本類庫和常用方法優先設計為靜態方法 (如Log.Error  SqlHelper.Execute)
       
        4.為什么選擇靜態方法
      • 容易實現面向過程的編程
      • 靜態方法調用較為簡單,少了一個new的過程
      • 如果希望設計一個較為獨立的方法(和類中的其他對象關系較少),靜態方法是一個較好的選擇 ,靜態方法往往更容易移植
      • 性能較好
          1.不需要在運行時判斷多態 (沒有繼承鏈的問題)
          2.調用靜態方法不需要傳遞實例對象指針
          3.實例方法需要至少new一個對象, 有GC的壓力 
       
        5.為什么選擇實例方法
      • 和面向對象的設計結合較好
      • 借助多態等,功能比靜態方法要強大



      方法可訪問性
       
        1.在聲明方法的時候顯式聲明可訪問性, 不要使用默認值,以免不熟悉默認訪問性的開發者搞錯了
       
        
        2.保持最低的可訪問性, 例如能private的就不要public
      • 避免第三方錯誤調用了不應該public的方法
      • 避免第三方引用了public方法以后,在重構時無法移除該方法
         
        3. 使用new關鍵字復寫父類方法 , 一般要保持同級或者較高的可訪問性
       public class ClassA
      {
      public virtual void Test()
      {
      }
      }
      public class ClassC : ClassA
      {
      protected new void Test() //bad
      {
      }
      }


      方法繼承
       

        1.如果想重寫父類的方法,一定要用new關鍵字顯式覆蓋,以免非預期的重寫

          public class ClassA
      {
      public void Test()
      {
      }
      }

      public class ClassB : ClassA
      {
      public new void Test()//good
      {
      }
      }

      public class ClassC : ClassA
      {
      public void Test() //bad
      {
      }
      }



        2.某些方法需要一起被override, 例如  IComparable.CompareTo  和 Equals , 又例如重寫運算符的時候  =  和 !=


        3.只在希望子類override方法實現的時候使用virtual關鍵字


        4.不要在構造函數中調用虛方法

      •    調用虛方法時,直到運行時之前都不會選擇執行該方法的實際類型。 構造函數調用虛方法時,可能尚未執行調用該方法的實例的構造函數。
        5.如果是實現了Dispose方法,那么在該方法體內,請調用父類的Dispose方法


      對比

        1.和屬性對比    

      • 屬性返回值相對靜態,所以DateTime.Now是一個不好的設計(因為Now的值會一直變化)
      • 方法返回值相對動態,所以Guid.NewGuid()是一個好的設計


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

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

      posted on 2011-10-12 13:40  聽說讀寫  閱讀(4646)  評論(11)    收藏  舉報

      導航

      主站蜘蛛池模板: 久久99九九精品久久久久蜜桃 | 超碰国产天天做天天爽| 一区二区精品久久蜜精品| 内射极品少妇xxxxxhd| 日本熟妇人妻一区二区三区| 麻豆国产传媒精品视频| 亚洲成人精品综合在线| 亚洲av伦理一区二区| 性欧美乱熟妇xxxx白浆| 最新国产精品拍自在线观看| 国产精品成人久久电影| 国产在线一区二区不卡| 国产欧美日韩精品丝袜高跟鞋| 国产精品久久精品| 伊人久久久av老熟妇色| 日本欧美大码a在线观看| 日韩中文字幕亚洲精品| 乱色欧美激惰| 久久精品一区二区东京热| 内射视频福利在线观看| 亚洲熟妇精品一区二区| 少妇被爽到高潮喷水久久欧美精品| 一面膜上边一面膜下边视频| 欧美乱妇狂野欧美在线视频| 蜜臀av黑人亚洲精品| 国产国拍亚洲精品永久软件| 夜夜躁狠狠躁日日躁| 国产精品美女黑丝流水| 久久久久久伊人高潮影院| 泗阳县| 福利网午夜视频一区二区| 亚洲人成电影在线天堂色| 日韩高清视频 一区二区| 蜜臀精品视频一区二区三区| 成人av午夜在线观看| 精品国产中文字幕在线| 国产精品自在拍首页视频| 人成午夜免费大片| 亚洲欧洲av一区二区| 久久久精品2019中文字幕之3| 2020国产成人精品视频|