我有一个应用程序,每次处理时都需要重新初始化。类似的东西:
private void method(int someValue, int someValue2)
{
obj.val1 = someNewValue;
obj1.Val2 = someNewValue2;
}
将重复调用此方法。所以我怀疑每次重新初始化对象有什么用呢?就像是;
private void method(int someValue, int someValue2)
{
obj = new object();
obj.Val1 = someNewValue;
obj1.Val2 = someNewValue2;
}
我知道将null
分配给一个对象并没有什么结果。
或者我应该实施IDisposable
?问题是我每次都需要新的价值。在这种情况下,分配是否正常?如果我重新初始化,我不知道已经分配的对象会发生什么,如第二种方法所示。
答案 0 :(得分:5)
“引用对象”只有在使用非托管内存时才需要处理(通过调用Dispose()
)。所有这些对象(在.NET类库中)都实现了IDisposable
。另一方面,受管对象由垃圾收集器在后台自动收集(删除)。事实上,没有直接的方法来删除托管对象。你不应该担心这些对象。一旦它们超出范围,GC最终会释放它们的记忆。
简单地为托管变量分配新值会释放先前值的引用,因此可供GC删除。
答案 1 :(得分:3)
这个Object是一个自定义类吗?如果是这样,我会写一个“重置()”方法来完成你需要的所有重置。
例如,你会打电话给private void method(int someValue, int someValue2)
{
obj.Reset();
obj.Val1 = someValue;
obj1.Val2 = someValue2;
}
在重置功能中,你可以做任何你需要考虑的对象“重新初始化”
即
public void Reset()
{
this.Val1 = 0;
this.Val2 = 0;
this.Name = "";
this.Date = DateTime.MinDate;
//You get the Idea, reset whatever needed to whatever you need.
}
使用此函数,您也可以在构造函数中简单地调用“Reset();”所以你知道当另一个方法在这个对象上调用“Reset”以及一个新的对象时,这些值是相同的。