在设计对象继承的时候,父对象建构子会需要一些参数,这些参数可以由子对象建构子透过base关键词来提供。

namespace Test001
{public class ParentClass{// Constructorspublic ParentClass(IEnumerable<string> dataCollection){this.DataCollection = dataCollection;}// Propertiespublic IEnumerable<string> DataCollection { get; private set; }}public class ChildClass : ParentClass{// Constructorspublic ChildClass() : base(new List<string>()) { }}
}

但是如果子对象,要使用这个传递给父对象的参数,就需要一点小技巧才能取得了。先来看一开始解决的想法是,先建立子对象的属性对象,然后再传递给父对象。这个方法很快就失败,光是编译就不过了….。对象的建立是先跑建构子、然后生出对象。在建构子的阶段,就要使用对象的属性,一定是失败的。

namespace Test002
{public class ParentClass{// Constructorspublic ParentClass(IEnumerable<string> dataCollection){this.DataCollection = dataCollection;}// Propertiespublic IEnumerable<string> DataCollection { get; private set; }}public class ChildClass : ParentClass{// Fieldsprivate readonly List<string> _dataCollection = new List<string>();// Constructorsprivate ChildClass() : base(_dataCollection) { }}
}

想了一下,换个角度去解决这个问题。干脆另外再开一个子对象的建构子,先建立要传给父对象的对象,然后不直接传给父对象的建构子,而是传给子对象自己的建构子,然后这个建构子在传递给父对象。写到我眼睛都花了,好像绕口令….。直接看程序代码吧,其实还蛮简单就可以完成这个小小的设计:

namespace Test003
{public class ParentClass{// Constructorspublic ParentClass(IEnumerable<string> dataCollection){this.DataCollection = dataCollection;}// Propertiespublic IEnumerable<string> DataCollection { get; private set; }}public class ChildClass : ParentClass{// Fieldsprivate readonly List<string> _dataCollection = null;// Constructorspublic ChildClass() : this(new List<string>()) { }private ChildClass(List<string> dataCollection): base(dataCollection){_dataCollection = dataCollection;}}
}

转载于:https://www.cnblogs.com/clark159/archive/2012/09/15/2686035.html

[.NET] 建构子中传递子对象的对象相关推荐

  1. 四、CXF WebService中传递复杂类型对象

    前面介绍的都是传递简单的字符串,现在开始介绍传递复杂类型的对象.如JavaBean.Array.List.Map等. 1. 首先看看服务器端的代码所需要的JavaBean对象 package com. ...

  2. 信号发送,槽函数执行,过程中传递的是对象的引用,涉及的拷贝操作

    如果qt的信号和槽之间发送的是对象的引用,传递过程中会发生拷贝操作. 一.跨线程之间 #ifndef __MAIN_WINDOW_H_ #define __MAIN_WINDOW_H_#include ...

  3. Vue 中 props 传值,父组件向子组件传递对象/数组可以直接修改的问题

    vue 中父子组件通信最常用的方式是 props 和 $emit,所有的 prop 都使得其父子 prop 之间形成了一个单向下行绑定:父级 prop 的更新会向下流动到子组件中,但是反过来则不行.这 ...

  4. 父组件访问子组件中的数据(父子组件通信案例:父组件访问子组件$refs[‘子组件‘],子组件传递数据给父组件(父组件中使用v-model))

    一.需求 二.在父组件upload-cover中: 通过$refs['子组件的ref属性值']就能拿到子组件对象 三.在子组件imgae-list(相对于父组件upload-cover来说,image ...

  5. vue 点击事件传递多个参数_Vue子组件监听事件中传递参数的方法

    在子组件中,我们可以通过以下方式监听事件: v-on:click="$emit('funcName',a)" 如果需要传多个参数,可以通过以下方式: v-on:click=&quo ...

  6. vector 作为dll 接口参数_DLL中传递STL参数,vector对象作为dll参数传递等问题(转)...

    STL使用模板生成,当我们使用模板的时候,每一个EXE,和DLL都在编译器产生了自己的代码,导致模板所使用的静态成员不同步,所以出现数据传递的各种问题,下面是详细解释. 原因分析:一句话-----如果 ...

  7. java中形参不可以是对象吗_(重要)java都是值传递,与对象形参所指向的对象改变,其实参所指向的对象也相应改变并不矛盾(2011年9.30日一天写的两个程序的总结结果)...

    1.0建立二叉树的代码,在java中必须创建二叉树的方法必须用返回值,因为不存在c语言中的引用传递,在java中只有值传递 代码1为正确,代码2(没有使用返回值)为错误.那么为什么之前的例子中将对象作 ...

  8. python中、变量指向的对象可以发生变化吗_python中的引用传递,可变对象,不可变对象,list注意点...

    python中的引用传递 首先必须理解的是,python中一切的传递都是引用(地址),无论是赋值还是函数调用,不存在值传递. 可变对象和不可变对象 python变量保存的是对象的引用,这个引用指向堆内 ...

  9. Android中传递对象的三种方法

    Android中,Activity和Fragment之间传递对象,可以通过将对象序列化并存入Bundle或者Intent中进行传递,也可以将对象转化为JSON字符串,进行传递. 序列化对象可以使用Ja ...

最新文章

  1. Serendipity解决IE缓存为0
  2. JVM(3)——Java GC分析
  3. 文档模型(JSON)使用介绍
  4. (转)yi_meng linux 下 ifcfg-eth0 配置 以及ifconfig、ifup、ifdown区别
  5. [kafka]kafka集群实践
  6. A20 网卡驱动分析
  7. 更新Android Studio 3.0,你遇到坑了吗?
  8. 6426C Lab2 部署和配置证书服务
  9. 有关 this 指向问题总结
  10. Excel导出当前工作表为PDF文件的操作
  11. 定义一个矩形类Rectangle
  12. translate maketrans 方法详解
  13. jmeter性能测试并监控服务器
  14. 打印时出现“错误!未找到引用源”“未定义书签”怎么办?
  15. 现实黑镜 | 面对死亡,你愿意将意识上传 获得“永生”吗?
  16. 计算机丢失msvc80.dll,msvcr80.dll
  17. html5绘制图形渐变-径向渐变
  18. 如何编写firefox插件
  19. chunk-vendors.js 语法错误
  20. html的动画属性,css动画属性使用及实例代码(transition/transform/animation)

热门文章

  1. rstudio运行python_RStudio 1.2发布,改进对Python chunks,R脚本等的测试和支持
  2. python源码多平台编译_ubuntu编译python源码的坑
  3. 数学--数论--HDU1222 狼和兔子(最大公约数)
  4. 哇靠靠,这也行?零基础DIY无人驾驶小车(三)
  5. 街景图像分割_借助深度学习和街景图像进行城市的大规模树木死亡率研究
  6. FTP和TFTP的区别与介绍
  7. 如果信用卡欠款不还被坐牢,那所欠的钱还用还吗?
  8. 一发工资就全部取出,会对银行流水有影响吗?
  9. 赫塔•米勒获诺贝尔文学奖说明了什么?
  10. jquery全局变量_jQuery源码一个小细节,却很好地体现了性能优化的思想,很优秀...