基于.NET中建构子中传递子对象的对象详解
2013-05-04 00:00
579 查看
在设计对象继承的时候,父对象建构子会需要一些参数,这些参数可以由子对象建构子透过base关键词来提供。
但是如果子对象,要使用这个传递给父对象的参数,就需要一点小技巧才能取得了。先来看一开始解决的想法是,先建立子对象的属性对象,然后再传递给父对象。这个方法很快就失败,光是编译就不过了….。对象的建立是先跑建构子、然后生出对象。在建构子的阶段,就要使用对象的属性,一定是失败的。
想了一下,换个角度去解决这个问题。干脆另外再开一个子对象的建构子,先建立要传给父对象的对象,然后不直接传给父对象的建构子,而是传给子对象自己的建构子,然后这个建构子在传递给父对象。写到我眼睛都花了,好像绕口令….。直接看程序代码吧,其实还蛮简单就可以完成这个小小的设计:
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>()) { } } }
但是如果子对象,要使用这个传递给父对象的参数,就需要一点小技巧才能取得了。先来看一开始解决的想法是,先建立子对象的属性对象,然后再传递给父对象。这个方法很快就失败,光是编译就不过了….。对象的建立是先跑建构子、然后生出对象。在建构子的阶段,就要使用对象的属性,一定是失败的。
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) { } } }
想了一下,换个角度去解决这个问题。干脆另外再开一个子对象的建构子,先建立要传给父对象的对象,然后不直接传给父对象的建构子,而是传给子对象自己的建构子,然后这个建构子在传递给父对象。写到我眼睛都花了,好像绕口令….。直接看程序代码吧,其实还蛮简单就可以完成这个小小的设计:
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中建构子中传递子对象的对象详解
- [.NET] 建构子中传递子对象的对象
- [.NET] 建构子中传递子对象的对象
- 详解JavaScript基于面向对象之创建对象(2)
- 详解JavaScript基于面向对象之创建对象(2)
- Yii基于数组和对象的Model查询技巧实例详解
- 详解JavaScript基于面向对象之创建对象(1)
- 基于.NET的SQL条件对象
- 基于.Net中的数字与日期格式化规则助记词的使用详解
- Intent实现A页面跳转到B页面,通过意图由A界面传递对象及对象列表的详解
- Android 基于Netty的消息推送方案之对象的传递(四)
- MyEclipse8.5 基于jax-ws的webservice对象(实体)传递的开发
- 基于Java class对象说明、Java 静态变量声明和赋值说明(详解)
- 详解如何动态调用WebService传递复杂对象的实现
- 基于js对象,操作属性、方法详解
- 基于.Net的发布订阅模式API的实现与详解(一)
- Android 基于Netty的消息推送方案之对象的传递(四)
- Yii基于数组和对象的Model查询技巧实例详解
- 用正则表达式看.NET编程--正则核心对象详解(二)
- 基于js对象,操作属性、方法详解