0

我有一个应用程序,每次处理时都需要重新初始化。就像是 :

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?问题是我每次都需要新的值。在这种情况下分配可以吗?我不知道如果我按照第二种方法重新初始化,已经分配的对象会发生什么。

4

2 回答 2

5

Dispose()“引用对象”只有在使用非托管内存时才需要(通过调用)进行处置。所有此类对象(在 .NET 类库中)都实现IDisposable. 另一方面,托管对象由垃圾收集器在后台自动收集(删除)。事实上,没有直接删除托管对象的方法。你不应该担心这些对象。一旦它们超出范围,GC 最终将释放它们的内存。

简单地为托管变量分配一个新值会释放对先前值的引用,因此它可以被 GC 删除。

于 2013-09-19T09:25:37.940 回答
3

这个对象是自定义类吗?如果是这样,我会编写一个“Reset()”方法来完成您需要的所有重置。

例如你会打电话

private void method(int someValue, int someValue2)
{
 obj.Reset();
 obj.Val1 = someValue;
 obj1.Val2 = someValue2;
}

并且在重置功能中,您将做任何您需要考虑“重新初始化”的对象

IE

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”以及一个新的对象时,值是相同的。

于 2013-09-19T09:23:10.470 回答