Я занимаюсь разработкой ASP.NET в VS и только что нашел интересное небольшое предложение кода (я думаю, что они получены от coderush, но я могу ошибаться).
Всякий раз, когда я создаю элементы управления, это говорит мне, что я должен использовать для них оператор "using". Я немного смущен тем, что здесь происходит, хотя. с использованием моего кода выглядит примерно так:
using (HtmlTableRow tableRow = new HtmlTableRow())
{
tableRow.Attributes.Add("class", isOddRow ? "OddRow" : "EvenRow");
listingTable.Rows.Add(tableRow);
addCell(tableRow, row, "issueId");
addCell(tableRow, row, "Title");
addCell(tableRow, row, "Type");
addCell(tableRow, row, "Summary");
}
Так что я ожидаю, что в конце оператора using он вызовет dispose для tableRow. Тем не менее, документы в библиотеке MSDN говорят:
Метод Dispose покидает Control
в непригодном состоянии. После звонка
этот метод, вы должны освободить все
ссылки на контроль, так что
память это занимало может быть
утилизируется сборщиком мусора.
Так что я ожидаю, что теперь в моей структуре управления есть непригодный объект, чтобы он ломался или не рендерился или что-то в этом роде. Тем не менее, кажется, что все работает отлично.
Так что мне интересно, почему все элементы управления одноразовые? Не потому ли, что некоторые из них будут такими, и их создание одноразово означает, что один вызов для удаления на верхнем уровне может затем рекурсивно передаваться всем дочерним элементам управления?
Думаю, я бы понял, если бы не тот факт, что в документах прямо сказано, что удаление элемента управления делает его непригодным для использования ... Являются ли документы просто неправильными?