Плохая практика? Использование неканона оператора использования c#

Попробуйте Eclipse PDT для установки среды Eclipse, которая имеет функции отладки как Вы упомянутый. Способность ступить в код является намного лучшим способом отладить тогда старый метод var_dump и печать в различных точках для наблюдения, где поток идет не так, как надо. Когда все остальное перестало работать, хотя и все, что я имею, является SSH и энергией I все еще var_dump() / die() для нахождения, куда код идет на юг.

19
задан Giffyguy 5 August 2009 в 19:09
поделиться

6 ответов

Это вполне приемлемая практика. Они называются Factored Types, и в Framework Design Guidelines рекомендуется делать именно это.

В основном, если тип завершает операцию с определенным временем жизни, использование IDisposable и оператор using становится подходящей вещью для рассмотрения .

Я на самом деле писал на эту конкретную тему здесь .

20
ответ дан 30 November 2019 в 02:56
поделиться

Я не рекомендую; Я считаю, что код должен эффективно взаимодействовать с сопровождающим кода, а не с компилятором, и должен быть написан с учетом понимания сопровождающего. Я пытаюсь использовать «использование» только для того, чтобы избавиться от ресурса, обычно неуправляемого.

Я в меньшинстве. Большинство людей, кажется, используют «использование» в качестве механизма общего назначения «Я хочу, чтобы некоторый код очистки запускался, даже если возникло исключение».

Мне это не нравится, потому что (1) у нас уже есть механизм для этого, называемый "try-finally", (2) он использует функцию для цели, для которой она не предназначена, и (3) если вызов код очистки важен, тогда почему он не виден в том месте, где он вызван? Если это важно, я хочу увидеть это.

12
ответ дан 30 November 2019 в 02:56
поделиться

То, что ты можешь (или потому, что Фил Хаак сказал, что это нормально), не означает, что ты должен.

Основное эмпирическое правило: если я могу прочитать ваш код и понять, что он делает и каковы были ваши намерения, то это приемлемо. Если, с другой стороны, вам нужно объяснить, что вы сделали или почему вы это сделали, это, вероятно, сбивает с толку младших разработчиков, поддерживающих код.

Есть много других шаблонов, которые могут сделать это с помощью лучшей инкапсуляции.

Итог: этот «метод» ничего не покупает и действует только для того, чтобы запутать других разработчиков.

6
ответ дан 30 November 2019 в 02:56
поделиться

Я думаю, вам следует использовать IDisposable для того, для чего он предназначен, и ничего больше. То есть, если для вас имеет значение ремонтопригодность.

2
ответ дан 30 November 2019 в 02:56
поделиться

Это распространенный шаблон, но лично я считаю, что нет оправдания такому злоупотреблению IDisposable, когда вы можете достичь того же эффекта гораздо более очевидным способом с помощью анонимных делегатов и / или лямбда-выражений; например:

blitter.BlitOperation(delegate
{
   // your code
});
5
ответ дан 30 November 2019 в 02:56
поделиться

Я бы сказал, что это приемлемо - на самом деле, я использовал его в некоторых проектах, где я хотел, чтобы действие запускалось в конце определенного блока кода.

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");
0
ответ дан 30 November 2019 в 02:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: