C#改变这个'来自对象内部

时间:2018-03-12 05:49:33

标签: c#

这可能是一种可怕的做事方式,但无论如何都要进行......

我想从对象本身重新初始化一个对象。

我有一个名为Quote的对象,其中一个方法是Calculate(),它做了很多事情。有一件事是,如果某些主要房产被改变,我们称之为大变革,我们需要创建一个新的报价(不只是更新现有的)。

Calculate()的中间,这样做真的很容易(IMO):

public class Quote {
    public bool Calculate() {

        //... do lots of things

        if(IsBigChange) {
            this = new Quote();
        }

        //... do more things
        // later when it is saved it will be a new quote

    }
}

Calculate()来自很多地方,所以我不想在检测到大变化时踢出来并在外面创建新对象,如果你知道什么我的意思是。

因此,如果您无法设置this,是否有另一种方法可以达到相同的效果?

1 个答案:

答案 0 :(得分:5)

不,你不能改变this。伙计,这会令人困惑。

话虽这么说,你可以从一个静态方法设置 this(某种类型),该方法没有this开始。您只需创建一个新对象并将其返回。这是一种非常传统的方式。例如:

class Quote
{
    static public Quote Calculate(int inputData)
    {
        var foo = DoComputations(inputData);
        return new Quote(foo);
    }

    public Quote(Foo foo)
    {
        //Initialize member variables based on the output of the calculations (a.k.a. foo)
    }
}

然后不要这样称呼它:

var q = new Quote();
q.Calculate(data);

你这样做:

var q = Quote.Calculate(data);