基于.NET中建構子中傳遞子對象的對象詳解_.Net教程

      編輯Tag賺U幣

      推薦:.NET中STAThread的使用詳解
      這個STA線程模型,在線程內加入了訊息幫浦等等機制,減少開發人員撰寫窗口程序的工作量

      在設計對象繼承的時候,父對象建構子會需要一些參數,這些參數可以由子對象建構子透過base關鍵詞來提供。
      復制代碼 代碼如下:www.wf0088.com

      namespace Test001
      {
      public class ParentClass
      {
      // Constructors
      public ParentClass(IEnumerable<string> dataCollection)
      {
      this.DataCollection = dataCollection;
      }


      // Properties
      public IEnumerable<string> DataCollection { get; private set; }
      }

      public class ChildClass : ParentClass
      {
      // Constructors
      public ChildClass() : base(new List<string>()) { }
      }
      }

      但是如果子對象,要使用這個傳遞給父對象的參數,就需要一點小技巧才能取得了。先來看一開始解決的想法是,先建立子對象的屬性對象,然后再傳遞給父對象。這個方法很快就失敗,光是編譯就不過了….。對象的建立是先跑建構子、然后生出對象。在建構子的階段,就要使用對象的屬性,一定是失敗的。
      復制代碼 代碼如下:www.wf0088.com

      namespace Test002
      {
      public class ParentClass
      {
      // Constructors
      public ParentClass(IEnumerable<string> dataCollection)
      {
      this.DataCollection = dataCollection;
      }


      // Properties
      public IEnumerable<string> DataCollection { get; private set; }
      }

      public class ChildClass : ParentClass
      {
      // Fields
      private readonly List<string> _dataCollection = new List<string>();


      // Constructors
      private ChildClass() : base(_dataCollection) { }
      }
      }

      想了一下,換個角度去解決這個問題。干脆另外再開一個子對象的建構子,先建立要傳給父對象的對象,然后不直接傳給父對象的建構子,而是傳給子對象自己的建構子,然后這個建構子在傳遞給父對象。寫到我眼睛都花了,好像繞口令….。直接看程序代碼吧,其實還蠻簡單就可以完成這個小小的設計:

      復制代碼 代碼如下:www.wf0088.com

      namespace Test003
      {
      public class ParentClass
      {
      // Constructors
      public ParentClass(IEnumerable<string> dataCollection)
      {
      this.DataCollection = dataCollection;
      }


      // Properties
      public IEnumerable<string> DataCollection { get; private set; }
      }

      public class ChildClass : ParentClass
      {
      // Fields
      private readonly List<string> _dataCollection = null;


      // Constructors
      public ChildClass() : this(new List<string>()) { }

      private ChildClass(List<string> dataCollection)
      : base(dataCollection)
      {
      _dataCollection = dataCollection;
      }
      }
      }

      分享:.NET中RDLC循環處理數據的應用分析
      本篇文章介紹了,.NET中RDLC循環處理數據的應用分析。需要的朋友參考下

      來源:模板無憂//所屬分類:.Net教程/更新時間:2013-05-05
      相關.Net教程