这可能是一种可怕的做事方式,但无论如何都要进行......
我想从对象本身重新初始化一个对象。
我有一个名为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
,是否有另一种方法可以达到相同的效果?
答案 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);