Попробуйте Eclipse PDT для установки среды Eclipse, которая имеет функции отладки как Вы упомянутый. Способность ступить в код является намного лучшим способом отладить тогда старый метод var_dump и печать в различных точках для наблюдения, где поток идет не так, как надо. Когда все остальное перестало работать, хотя и все, что я имею, является SSH и энергией I все еще var_dump()
/ die()
для нахождения, куда код идет на юг.
Это вполне приемлемая практика. Они называются Factored Types, и в Framework Design Guidelines рекомендуется делать именно это.
В основном, если тип завершает операцию с определенным временем жизни, использование IDisposable и оператор using становится подходящей вещью для рассмотрения .
Я на самом деле писал на эту конкретную тему здесь .
Я не рекомендую; Я считаю, что код должен эффективно взаимодействовать с сопровождающим кода, а не с компилятором, и должен быть написан с учетом понимания сопровождающего. Я пытаюсь использовать «использование» только для того, чтобы избавиться от ресурса, обычно неуправляемого.
Я в меньшинстве. Большинство людей, кажется, используют «использование» в качестве механизма общего назначения «Я хочу, чтобы некоторый код очистки запускался, даже если возникло исключение».
Мне это не нравится, потому что (1) у нас уже есть механизм для этого, называемый "try-finally", (2) он использует функцию для цели, для которой она не предназначена, и (3) если вызов код очистки важен, тогда почему он не виден в том месте, где он вызван? Если это важно, я хочу увидеть это.
То, что ты можешь (или потому, что Фил Хаак сказал, что это нормально), не означает, что ты должен.
Основное эмпирическое правило: если я могу прочитать ваш код и понять, что он делает и каковы были ваши намерения, то это приемлемо. Если, с другой стороны, вам нужно объяснить, что вы сделали или почему вы это сделали, это, вероятно, сбивает с толку младших разработчиков, поддерживающих код.
Есть много других шаблонов, которые могут сделать это с помощью лучшей инкапсуляции.
Итог: этот «метод» ничего не покупает и действует только для того, чтобы запутать других разработчиков.
Я думаю, вам следует использовать IDisposable для того, для чего он предназначен, и ничего больше. То есть, если для вас имеет значение ремонтопригодность.
Это распространенный шаблон, но лично я считаю, что нет оправдания такому злоупотреблению IDisposable, когда вы можете достичь того же эффекта гораздо более очевидным способом с помощью анонимных делегатов и / или лямбда-выражений; например:
blitter.BlitOperation(delegate
{
// your code
});
Я бы сказал, что это приемлемо - на самом деле, я использовал его в некоторых проектах, где я хотел, чтобы действие запускалось в конце определенного блока кода.
Wes Deyer использовал его в своей программе LINQ to ASCII Art, он назвал это одноразовым действием (Уэс работает в команде компиляторов C # - я доверяю его мнению: D):
http://blogs.msdn.com/wesdyer/archive /2007/02/23/linq-to-ascii-art.aspx
class ActionDisposable: IDisposable
{
Action action;
public ActionDisposable(Action action)
{
this.action = action;
}
#region IDisposable Members
public void Dispose()
{
this.action();
}
#endregion
}
Теперь вы можете вернуть это из функции и сделать что-то вроде этого:
using(ExtendedConsoleWriter.Indent())
{
ExtendedConsoleWriter.Write("This is more indented");
}
ExtendedConsoleWriter.Write("This is less indented");