当前位置: 移动技术网 > IT编程>开发语言>.net > 基于.NET中建构子中传递子对象的对象详解

基于.NET中建构子中传递子对象的对象详解

2017年12月12日  | 移动技术网IT编程  | 我要评论

华帝燃气灶好不好,boleebird,倍洛加官方

在设计对象继承的时候,父对象建构子会需要一些参数,这些参数可以由子对象建构子透过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;
        }
    }
}

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网