C#从对象内改变'this'

Mat*_*emp 3 c#

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

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

我有一个名为的对象Quote,其中一个方法是Calculate(),它做了很多事情.有一件事是,如果某些主要属性发生变化,我们称之为大变革,我们需要创建一个新的Quote(不只是更新现有的).

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

    }
}
Run Code Online (Sandbox Code Playgroud)

Calculate() 从许多地方调用,所以如果你知道我的意思,我不想在检测到Big Change时将其踢出并在"外部"创建新对象.

所以,如果你不能设置this,是否有其他方法可以实现相同的结果?

Joh*_* Wu 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)
    }
}
Run Code Online (Sandbox Code Playgroud)

然后而不是像这样调用它:

var q = new Quote();
q.Calculate(data);
Run Code Online (Sandbox Code Playgroud)

你这样做:

var q = Quote.Calculate(data);
Run Code Online (Sandbox Code Playgroud)

  • 您无法更改此参考类型.对于你实际可以使用的结构(也就是说,你可以在结构中执行`this = someStruct`). (2认同)