2015-11-05 6 views
2

Если элемент массива хранится на ссылке, весь массив не будет собираться мусором?Ссылка на список членов массива и сбор мусора

, например, метод:

void ParseUtility(string strInput, out string header) 
    { 
     header = ""; 

     string[] parsed = strInput.Split(','); 
     if ((parsed != null) && (parsed.Length > 0)) 
     { 
      header = parsed[0]; 
     } 
     return; 
    } 

при возвращении из этого метода, весь массив строк «разобран» будет храниться до тех пор, как «заголовок» используется?

ответ

3

Это не так. string это класс, так что любой string экземпляра имеет независимое существование - каждый элемент массива просто относится кstring и header = parsed[0] сохраняет ссылку на string, а не в массив. Может ли массив быть GC'ed, зависит только от того, доступен ли сам массив.

+0

, что означает, .net framework всегда поддерживает объекты по наименьшим ссылочным единицам? - для List, HashSet и т. д., структура получает свои независимые коллекции дочерних элементов List или HashSet? – Chengting

+0

Да; даже если у вас есть крошечный класс, единственным членом которого является один «bool», экземпляры этого класса индивидуально отслеживаются и GC'ed. –

2

Не следует. parsed имеет ссылку на разбор [0], а не наоборот.