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

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

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

      代碼重構~提取到類

      返回目錄

      提取到類(Extract Class) : 將多個類所公用的部分(包括方法,屬性,事件等等)抽象出來,形成一個新的類型,這個類被稱為它們的基類(base class)或者父類,而使用面向對象語言的特性,在基類中使用抽象對象或者虛對象,讓子類可以直接使用基類的成員或者根據自己的邏輯去覆寫基類的成員,提交到類經常被用到產品族的概念中,如一個數據操作基類,它的子類可能是user操作類,product操作類,order操作類等,具體看一下代碼:

      userRespository類型是用來對user表進行直接的單純的數據操作的,它可以是這樣的

      而對于userRespository來說,它可能需要一個DB數據源對象(可能是linq to sql,ef的一種),還有一些標準的CURD操作的方法,而這些對于productRespository類型也是一樣需要的,這時,我們就應該將userRepository和productRepository公用的部分提取出來,行成它們的基類,即RepositoryBase

      在這個RepositoryBase基類中,還使用了接口,它實現了對所有數據基類(可能是linq to sql基類,ef基類,內存數據源基類,緩存數據源基類等)操作的統一性和一致性。

      我們在進行“提取到類”時,需要注意的幾個概念是:

      抽象方法:abstract method,在基類去定義方法規范,由子類去實現它的邏輯

      虛方法:virtual method,在基類去實現了這個方法,但子類可以根據自己的邏輯去override它

      抽象類:一般基類都是不能被直接實例化的,所以一般是抽象類

      如果上面的代碼不容易理解,可以看一面簡單的demo,一個boy類,它有一個屬生name和一個方法display(),name表示為男孩的姓名,display輸出男孩的姓名;而另外一個類girl,它也一樣有name和display,這時,我們可以將boy和girl公有的屬性和方法進行抽取,放在person類,而它應該有兩個屬性name和gander,代表人的姓名和性別,有一個方法是display(),用來輸出人的姓名和性別,這個簡單的例子很好的說明了提取到類的使用場合,它的代碼如下:

       1 //男孩子
       2 class Boy
       3 {
       4   public string Name{get;set;}
       5 
       6   public void Display()
       7  {
       8   Console.Write("男孩姓名是{0}",Name);
       9   }
      10 }
      11 //女孩子
      12 class Girl
      13 {
      14   public string Name{get;set;}
      15 
      16   public void Display()
      17  {
      18   Console.Write("女孩姓名是{0}",Name);
      19   }
      20 }
      21 //而把方法修改后變為
      22 
      23 class Person
      24 {
      25   public string Name{get;set;}
      26   public string Gander{get;set;}
      27   public virtual void Display()
      28   {
      29      Console.Write("{0}姓名是{1}",Gander,Name);
      30    }
      31 }
      32 
      33 //男孩根據自己的需要,去override  Display()這個方法
      34 class Boy
      35 {
      36   public string Name{get;set;}
      37 
      38   public void Display()
      39  {
      40   Console.Write("性別:{0},姓名:{1}",Gander,Name);
      41   }
      42 }

      其實,代碼重構它不僅是對代碼本身的重構(代碼執行性能),更重要的是對面向對象的重構(代碼的邏輯表現)。

      返回目錄

      posted @ 2012-07-27 17:18  張占嶺  閱讀(2391)  評論(3)    收藏  舉報
      主站蜘蛛池模板: 超碰自拍成人在线观看| 伊人久久大香线蕉综合观| 成人做受120秒试看试看视频| 无码人妻精品一区二区在线视频| 好看的国产精品自拍视频| 国产成人午夜福利精品| 闸北区| 国产精品自产在线观看一| 十八禁午夜福利免费网站| 日日躁夜夜躁狠狠躁超碰97 | 久久这里精品国产99丫E6| 成人免费无遮挡在线播放| 性人久久久久| 亚洲成av人片乱码色午夜| 永久免费在线观看蜜桃视频 | 国产欧美日韩另类精彩视频| 精品无码久久久久久久久久| 久久精品99国产精品日本| 亚洲av日韩av永久无码电影| 亚洲女女女同性video| 国产成人精彩在线视频| 忘忧草在线社区www中国中文| 精品一区二区三区四区色| 色婷婷综合久久久中文字幕 | 91久久亚洲综合精品成人| 国产97人人超碰caoprom| 国产蜜臀一区二区在线播放| 粗大猛烈进出高潮视频| 国产午夜精品福利91| 视频一区二区三区在线视频| 久久成人影院精品777| 亚洲国产综合av在线观看| 日韩精品国产二区三区| 天堂中文8资源在线8| 国产精品一区二区三区三级| 国产欧美日韩一区二区加勒比| 色爱区综合激情五月激情| 国产精品VA尤物在线观看| 在线涩涩免费观看国产精品| 丝袜美腿亚洲综合第一页| 国产精品亚韩精品无码a在线|