Почему вы используете этот оператор using в ASP.NET?
Рефакторинг кода снова. Видя некоторые из них на одной из страниц ASP.NET:
using (TextBox txtBox = e.Row.Cells[1].FindControl("txtBox") as TextBox)
{
}
Нет необходимости удалять txtBox, потому что это просто ссылка на существующий элемент управления. И вы не хотите, чтобы управление было удалено вообще. Я даже не уверен, что это не вредно, - похоже, он попросил, чтобы базовый элемент управления был удален ненадлежащим образом (хотя я еще не видел никаких побочных эффектов от его использования таким образом).
Ответы
Ответ 1
TextBox
наследует реализацию IDisposable
из Component суперкласса. Эта реализация удаляет компонент из сайта, если он есть.
Таким образом, это может иметь необоснованные последствия, если текстовое поле действительно находится в контейнере сайта. Кроме того, после вызова Dispose()
объекта, вы не должны использовать его снова, независимо от того, что (оно больше не используется в состоянии использования).
Я бы предложил вам избежать этого шаблона с помощью веб-элементов управления ASP.NET.
Ответ 2
Это неправильно, его нельзя использовать так. Я бы предположил, что есть потенциальные проблемы с этим, которые не появятся сразу. Текстовые файлы dispose вызываются при выходе из оператора using, но он не будет собираться немедленно. Если он будет собран, у вас возникнут проблемы позже, когда вы попытаетесь получить доступ к этому элементу управления.
Ответ 3
Экземпляр TextBox
потенциально может быть нулевым, если не найден, поэтому Dispose() вызывается как NullReferenceException
.
Я никогда не видел эту схему на практике, но если вам нужно ее использовать, было бы полезно обработать любые потенциальные ошибки.
Ответ 4
Не должно быть отрицательных вторичных эффектов, но это не обязательно. Если бы мы выполнили using (x) { ... }
все, что реализует IDisposable в CLR, большинство С# -кодов будут нечитабельны.
Ответ 5
Собственно, здесь экземпляр TextBox доступен только для контекста внутри скобок с использованием оператора, возможно, это была основная причина его использования.
Ответ 6
Из MSDN:
Внутри блока использования объект доступен только для чтения и не может быть изменен или переназначен.
Итак, я думаю, вы можете только читать свойства текстового поля, но не изменять их, внутри блока использования.