公司网站后台上传不了图片,二级域名注册免费,厦门开企网,安卓apk软件下载官网在设计对象继承的时候#xff0c;父对象建构子会需要一些参数#xff0c;这些参数可以由子对象建构子透过base关键词来提供。 namespace Test001
{public class ParentClass{// Constructorspublic ParentClass(IEnumerablestring dataCollection){this.DataCollecti…在设计对象继承的时候父对象建构子会需要一些参数这些参数可以由子对象建构子透过base关键词来提供。 namespace Test001
{public class ParentClass{// Constructorspublic ParentClass(IEnumerablestring dataCollection){this.DataCollection dataCollection;}// Propertiespublic IEnumerablestring DataCollection { get; private set; }}public class ChildClass : ParentClass{// Constructorspublic ChildClass() : base(new Liststring()) { }}
}但是如果子对象要使用这个传递给父对象的参数就需要一点小技巧才能取得了。先来看一开始解决的想法是先建立子对象的属性对象然后再传递给父对象。这个方法很快就失败光是编译就不过了….。对象的建立是先跑建构子、然后生出对象。在建构子的阶段就要使用对象的属性一定是失败的。 namespace Test002
{public class ParentClass{// Constructorspublic ParentClass(IEnumerablestring dataCollection){this.DataCollection dataCollection;}// Propertiespublic IEnumerablestring DataCollection { get; private set; }}public class ChildClass : ParentClass{// Fieldsprivate readonly Liststring _dataCollection new Liststring();// Constructorsprivate ChildClass() : base(_dataCollection) { }}
}想了一下换个角度去解决这个问题。干脆另外再开一个子对象的建构子先建立要传给父对象的对象然后不直接传给父对象的建构子而是传给子对象自己的建构子然后这个建构子在传递给父对象。写到我眼睛都花了好像绕口令….。直接看程序代码吧其实还蛮简单就可以完成这个小小的设计 namespace Test003
{public class ParentClass{// Constructorspublic ParentClass(IEnumerablestring dataCollection){this.DataCollection dataCollection;}// Propertiespublic IEnumerablestring DataCollection { get; private set; }}public class ChildClass : ParentClass{// Fieldsprivate readonly Liststring _dataCollection null;// Constructorspublic ChildClass() : this(new Liststring()) { }private ChildClass(Liststring dataCollection): base(dataCollection){_dataCollection dataCollection;}}
}转载于:https://www.cnblogs.com/clark159/archive/2012/09/15/2686035.html