Class1:
public class FunctionBlocks
{
List<Hashtable> _htLogicalNodeList;
public FunctionBlocks()
{
_htLogicalNodeList = new List<Hashtable>();
FunctionBlock fb = new FunctionBlock();
fb.AddDODASignalList(new Hashtable);
_htLogicalNodeList.Add(fb.LogicalNodeHash);
fb = null;
}
}
等级2:
public class FunctionBlock
{
Hashtable _htLogicalNode;
public FunctionBlock()
{
_htLogicalNode = new Hashtable();
}
public Hashtable LogicalNodeHash
{
get{return _htLogicalNode;}
set{_htLogicalNode = value;}
}
public void AddDODASignalList(Hashtable doDASignal)
{
_htLogicalNode.Add(doDASignal);
}
}
在这个例子中,我不想处理“_htLogicalNode”。 “fb”对象我将其设为null,尽管“FunctionBlocks”实例具有“_htLogicalNode”引用。我如何处置“_htLogicalNode”实例。
答案 0 :(得分:1)
答案 1 :(得分:0)
覆盖dispose方法,你可以将其设为null
答案 2 :(得分:0)
“处理”是什么意思?您可以FunctionBlock
实施IDisposable
,在这种情况下,您可以使用以下内容:
using (FunctionBlock fb = new FunctionBlock())
{
fb.AddDODASignalList(new Hashtable);
_htLogicalNodeList.Add(fb.LogicalNodeHash);
}
但是我在FunctionBlock
中看不到任何需要处理的内容,因此这样做毫无意义 - IDisposable
接口/模式本质上只是一种调用方法的花哨/健壮的方式你完成了一个对象。除非你在实现的Dispose
方法中做了一些事情,否则这什么都不做。
如果通过“dispose”表示释放内存,那么答案就是你不需要做任何事情(你甚至不需要将fb
设置为null )。只需让fb
超出范围,垃圾收集器就会收集它并在自己的时间内释放已用的内存。
您可能会发现fb
使用的内存未立即释放 - 这是完全正常的并且可以预期。有一些方法可以强制垃圾收集器在你想要的时候做“它的事情”,但这样做是非常糟糕的做法。