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

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

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

      【翻譯】使用Lazy<T>和抽象包裝類延遲加載復雜的系統參數

      2011-11-18 10:39  湯姆大叔  閱讀(2164)  評論(0)    收藏  舉報

      .Net Framework4.0里的Lazy<T>雖然提供給我們很好用的延遲加載功能,但是其中需要load的值和值的loader代碼是單獨分開的,使用起來不是很方便,有沒有什么好方法來解決這一問題呢?

       

      原始Lazy實現的問題:

      如下代碼是我們常用的Lazy代碼

       

      class Program
      {
      static void Main(string[] args)
      {
      var temperature = new Lazy<int>(LoadMinimalTemperature);

      Console.WriteLine("Minimal room temperature: " + temperature.Value);
      Console.ReadLine();
      }

      protected static int LoadMinimalTemperature()
      {
      var returnValue = 0;

      // Do complex stuff here

      return true;
      }
      }

      問題是,如果我們需要使用Lazy來load多個參數或者屬性,那維護起來就非常麻煩,如果能將這些參數聲明成單獨的class類,就好多了。

       聲明參數的基類:

      首先我們需要為所有Lazy load的參數提供一個基類,這是Lazy<T>的一個wrapper包裝類,并且包括一個模板方法,我們必須重寫這個方法以便提供需要load的數據。

      public abstract class LazyParameter<T>
      {
      private Lazy<T> _lazyParam;

      public LazyParameter()
      {
      _lazyParam = new Lazy<T>(Load);
      }

      protected abstract T Load();

      public T Value
      {
      get { return _lazyParam.Value; }
      }
      }

      也可以繼承Lazy<T>,但我沒補希望用它,因為Lazt<T>有6個構造函數需要注意,而且我也不希望暴露Lazy<T>原有公開的interface方法和參數。

       

      創建參數類:

      現在,來創建我們的第一個參數類,注意到我們僅僅實現了Load方法的重寫。

      public class MinimalRoomTemperature : LazyParameter<int>
      {
      protected override int Load()
      {
      var returnValue = 0;

      // Do complex stuff here

      return returnValue;
      }
      }

      使用起來非常簡單,下面是調用代碼:

      class Program
      {
      static void Main(string[] args)
      {
      var parameter = new MinimalRoomTemperature();
      Console.WriteLine("Minimal room temperature: " + parameter.Value);
      Console.ReadLine();
      }
      }


      結論:

      Lazy<T>雖然十分有用,但是我不建議在程序里直接使用,通過這篇帖子里的包裝類來使用,相對來說十分方便。該基類使用了泛型,所以可以擴展出各種各樣的代碼。

       

      網友評論:

      有的網友建議如下的使用方式,也很不錯,但是每次都在聲明的時候寫邏輯代碼,簡單的話還可以,復雜的話,我覺得還是通過聲明單獨的類比較容易理解。

          public class LazyParameter<T>
      {

      private readonly Lazy<T> _lazyParam;

      public LazyParameter(Func<T> load)
      {
      _lazyParam = new Lazy<T>(load);
      }



      public T Value
      {
      get { return _lazyParam.Value; }
      }
      }



      //調用方式:

      var temp = new LazyParameter<int>(() => 1 + 30).Value;

      var page = new LazyParameter<string>(

      () => HttpContext.Current.Request.QueryString["page"]

      ).Value;

      其實以上代碼和Lazy<T>里帶有Func<T>的構造函數是差不多的,例如:

      var lazyString = new Lazy<string>(() =>
      {
      // Here you can do some complex processing
      // and then return a value.
      Console.Write("Inside lazy loader");
      return "Lazy loading!";
      });


      原文鏈接:http://weblogs.asp.net/gunnarpeipman/archive/2011/11/11/using-lazy-lt-t-gt-and-abstract-wrapper-class-to-lazy-load-complex-system-parameters.aspx

      主站蜘蛛池模板: 久久久久久久久久久免费精品| 午夜一区欧美二区高清三区 | 亚洲av午夜福利大精品| 国产精品男女爽免费视频| 最近2019中文字幕免费看| 国产线播放免费人成视频播放| 久久一级精品久熟女人妻| 一本久久a久久精品亚洲| 亚洲欧美日韩精品久久亚洲区 | 99视频偷窥在线精品国自产拍| 最新精品国产自偷在自线| 久久国产免费观看精品3| 被拉到野外强要好爽| 亚洲av日韩av永久无码电影| 毛片无码一区二区三区| 国产资源精品中文字幕| 太白县| 国产激情一区二区三区午夜| 国产又色又爽又黄的在线观看| 熟女一区二区中文字幕| 国产在线无码精品无码| www欧美在线观看| 国产精品亚洲а∨天堂2021| 40岁成熟女人牲交片20分钟| 久久精品99国产精品日本| 色猫咪av在线网址| 免费现黄频在线观看国产| 国产精品一二区在线观看| 欧美亚洲综合成人A∨在线| 99国产精品自在自在久久| 国内揄拍国内精品少妇| 五月婷婷中文字幕| 大香伊蕉在人线国产免费| 亚洲国产欧美在线看片一国产| 国产一区二区不卡91| 日本一码二码三码的区分| 在线看片免费人成视久网| 日韩在线视频线观看一区| 极品无码国模国产在线观看| www久久只有这里有精品| 老司机精品成人无码AV|