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

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

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

      【More Effective C#】擴展方法

      2010-10-12 08:17  空逸云  閱讀(617)  評論(1)    收藏  舉報

        C#3.0中增加了許多新特性.其中.擴展方法允許我們在不修改原有代碼的基礎上擴展類/接口的功能.有技巧的運用該特性.能寫出有效率/易維護/美觀的代碼.

      增強現有接口

         C#2.0提供了許多泛型與容器的接口和類.最常見的如IComparable<T>常常需要新建一個Comparable來進行排序比較等等..但其默認只有一個CompareTo方法.在以前.我們只能手動添加.并且很難復用代碼.如今.利用擴展方法.可以很方便地擴展該接口.

       


      public static class Comparable
          {
              
      public static bool LessThan<T>(this T left, T right) where T : IComparable<T>
              {
                  
      return left.CompareTo(right) < 0;
              }

              
      public static bool GreaterThan<T>(this T left, T right) where T : IComparable<T>
              {
                  
      return left.CompareTo(right) > 0;
              }
              
      public static bool LessThanEqual<T>(this T left, T right) where T : IComparable<T>
              {
                  
      return left.CompareTo(right) <= 0;
              }
              
      public static bool GreaterThanEqual<T>(this T left, T right) where T : IComparable<T>
              {
                  
      return left.CompareTo(right) >= 0;
              }
          }

       

       如此一來.只要我們引用該類的命名空間.便可擴展的使用擴展方法.例如:

       


      public class Student : IComparable<Student>
          {
              
      public int CompareTo(Student other)
              {
                  
      return StuNo.CompareTo(other.StuNo);
              }

              
      public int StuNo { getset; }
              
      public string StuName { getset; }
          }

      Student a = new Student() { StuNo = 1, StuName = "a" };
      Student b = new Student() { StuNo = 2, StuName = "b" };
      Console.WriteLine(a.LessThan(b));

       

       注意!若是某個類需要定義一個方法,而這個類所實現的接口中也給出了同名的擴展方法,那么也許會導致一些意料之外的行為.根據方法的解析規則,類中的方法將會被優先調用,不過這個解釋發生在編譯器.若是通過接口來調用方法,則調用方法上的擴展方法,而非類的方法.

       增強現有類型

         除了能擴展接口.同樣.擴展方法對類也有強大的支持.C#3.0中提供了許多擴展方法.特別是對于泛型容器的支持特別豐富.有時候.我們可能也會根據需要增加自己的擴展方法.例如.有一個學生的容器.可能需要增加對于學生的特別查詢.如最近曠課最多的學生.請假最多的學生等.以前.我們可以自己寫一個學生的列表類StudentList繼承List<Student>.但現在我們可以直接擴展List<Student>.前者相比較后者,存在著更多的限制.擴展方法是用IEnumerable<Student>作為參數,而派生類基于List<Student>,即強制要求使用一種特定的存儲模型.因此.前者的做法無法與一系列的迭代方法組合使用.使方法的使用者受到不必要的約束.后者的使用更為靈活.

       擴展方法的建議

        雖然擴展方法給我們帶來很大的便利.但這不總是設計上的首選.只有在重用項目擴展功能.最好不要在不同的命名空間中聲明同名的擴展方法.這樣會增加后期的維護成本.擴展方法盡量不要重載.更應該使用與功能更貼切的簽名.

      主站蜘蛛池模板: 亚洲欧美色综合影院| 亚洲精品久久国产高清小说| 中文字幕av无码免费一区| 久久精品熟女亚洲av艳妇| 免费午夜无码片在线观看影院| 国产二区三区不卡免费| 天天澡天天揉揉av无码| 久久国产乱子精品免费女| 男人添女人下部高潮视频| 亚洲一区久久蜜臀av| 国产国拍精品av在线观看 | 亚洲欧美国产日韩天堂区| 成人亚洲综合av天堂| 亚洲精品综合网中文字幕| 在线免费成人亚洲av| 扒开双腿疯狂进出爽爽爽| 极品蜜桃臀一区二区av| 深田えいみ禁欲后被隔壁人妻| 日韩精品无码不卡无码| 亚洲老妇女亚洲老熟女久| 亚洲午夜福利AV一区二区无码| 亚洲avav天堂av在线网爱情| 国产精品久久久久久亚洲色| 亚洲欧洲日产国码久在线| 亚洲综合av男人的天堂| 精品亚洲国产成人av| 欧美无人区码suv| 精品久久精品午夜精品久久| 午夜免费福利小电影| 国产初高中生粉嫩无套第一次| 97成人碰碰久久人人超级碰oo| 临汾市| 国产精品亚洲аv无码播放| 中文字幕日韩熟女av| 国产精品天堂蜜av在线播放| 国产精品自在拍在线播放| 国产午夜福利片在线观看| 天堂中文8资源在线8| 强伦姧人妻免费无码电影| 韩国无码av片在线观看| 国产AV影片麻豆精品传媒|