如何在" get"中设置c#对象属性值。叫做

时间:2014-12-06 20:24:15

标签: c#

我只是想看看有没有办法可以做到这一点..我有两个班级。一个在另一个中作为财产存在。所以在某种程度上它就像父子类关系..但是我想在这个瞬间设置子对象的值,它的“get”是根据父对象中存在的值来调用的。只有它存在并且不是空的。

我也不想设置子对象(如果它已经被设置好了......)我只是要保持机制尽可能简单,这只不过是搞清楚了。

我的孩子班级

class ChildObject
    {
        public int? some_val { get; set; }

    }

我的父级是

class ParentObject
    {
        public int? some_val { get; set; }
        public ChildObject child
        {
            get {
               //if the chld hasnt been set already
                if (child == null)
                {
                    //if the value of the integer has been set
                    if(some_val != null)
                    {
                        //some some method that sets the objects value
                        //based on teh value of the integer property
                        SomeMethod();
                    }
                }
                return child;
            }
            set { child = value;}
        }
        private void SomeMethod()
        {
            int new_val = this.some_val.Value + 5;
            this.child = new ChildObject {  some_val = new_val };
        }
    }
}

在其他一些例行程序中...就像控制台应用程序的程序或我做的以下任何事情

  ParentObject p = new ParentObject ();
            p.some_val = 1;
            ChildObject c = p.child;
            int i = c.some_val.Value;

理想情况下,我想添加一些检查以查看父对象中的“some_val”是否已更改,如果是,则“设置”子对象...但是现在我只想弄清楚如何设置该属性第一次被调用。

由于某些原因,当我运行它时它只是崩溃。并没有任何异常。我试过在try catch中包含teh例程,看看问题是什么,但它只是停止运行并关闭执行控制台程序。

3 个答案:

答案 0 :(得分:1)

这里的问题是,当您想要为getset方法添加一些逻辑时,您需要包含一个包含实际值的字段。问题出现是因为你实际上有一个无限循环并且可能有一个SO异常。之所以会发生这种情况,是因为当你获得child之后,你又称之为“{1}}”。return _child;

        public int? some_val { get; set; }
        private ChildObject _child;
        public ChildObject child
        {
            get {
               //if the chld hasnt been set already
                if (_child == null)
                {
                    //if the value of the integer has been set
                    if(some_val != null)
                    {
                        //some some method that sets the objects value
                        //based on teh value of the integer property
                        SomeMethod();
                    }
                }
                return _child;
            }
            set { _child = value;}
        }
        private void SomeMethod()
        {
            int new_val = this.some_val.Value + 5;
            this.child = new ChildObject {  some_val = new_val };
        }

答案 1 :(得分:1)

您应该注意相同的字段或值名称。您应该尝试其他值和字段名称。像这样;

private ChildObject child;
public ChildObject Child
{
    get {
       //if the chld hasnt been set already
        if (child == null)
        {
            //if the value of the integer has been set
            if(some_val != null)
            {
                SomeMethod();
            }
        }
        return child;
    }
    set { child = value;}
}

你应该为封装原则提供资源。 祝你好运。

答案 2 :(得分:0)

您可以使用其他字段来执行此类操作

    public int? some_val { get; set; }
    public ChildObject _child;
    public ChildObject child
    {
        get {
           //if the chld hasnt been set already
            if (_child == null)
            {
                //if the value of the integer has been set
                if(some_val != null)
                {
                    SomeMethod();
                }
            }
            return _child;
        }
        set { _child = value;}
    }



    private void SomeMethod()
    {
        int new_val = this.some_val.Value + 5;
        this.child = new ChildObject {  some_val = new_val };
    }