Удалить экземпляр - PullRequest
       4

Удалить экземпляр

0 голосов
/ 16 августа 2011

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;
          }     
      }

Class2:

      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, экземпляр Eventhough "FunctionBlocks" имеет ссылки "_htLogicalNode". Как я могу распоряжаться экземпляром "_htLogicalNode".

Ответы [ 3 ]

1 голос
/ 16 августа 2011
0 голосов
/ 16 августа 2011

Что вы подразумеваете под «распоряжаться»? Вы можете иметь FunctionBlock орудие IDisposable, в этом случае вы можете использовать следующее:

using (FunctionBlock fb = new FunctionBlock())
{
    fb.AddDODASignalList(new Hashtable);            
    _htLogicalNodeList.Add(fb.LogicalNodeHash);     
}

Однако в FunctionBlock я не вижу ничего, что требует утилизации, и поэтому делать это было бы бессмысленно - интерфейс / шаблон IDisposable, по сути, просто причудливый / надежный способ вызова метода, когда вы закончите с объект. Если вы не сделаете что-то в реализованном методе Dispose, это ничего не даст.

Если под «распоряжаться» вы имеете в виду освобождение памяти, то ответ таков: вам не нужно ничего делать (вам даже не нужно устанавливать fb в ноль). Просто позвольте fb выйти из области видимости, и сборщик мусора соберет его и освободит использованную память в свое время.

Вы можете обнаружить, что память, используемая fb, не освобождается немедленно - это совершенно нормально и следовало ожидать. Существуют способы заставить сборщика мусора выполнять «свое дело», когда вы этого хотите, но делать это очень плохая практика .

0 голосов
/ 16 августа 2011

Переопределите метод dispose и там вы можете сделать его пустым

...