这可能是一种可怕的做事方式,但无论如何......
我想从对象本身重新初始化一个对象.
我有一个名为的对象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,是否有其他方法可以实现相同的结果?
不,你不能改变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)
| 归档时间: |
|
| 查看次数: |
76 次 |
| 最近记录: |