Как я знаю, что лучшее место использует 'использование'?

Мне кажется, я нашел решение, если у кого-то возникла такая же проблема:

  1. Скопировать папку проекта в другое место
  2. Удалить проект на Eclipse (установите флажок «Удалить содержимое проекта на диск ")
  3. Удалить папку .gradle внутри папки проекта
  4. Файл> Импорт> Существующий проект Gradle
  5. Найдите папку проекта

Теперь вы сможете снова запускать Gradle Tasks.

Надеюсь, это поможет;)

7
задан Bravax 3 April 2009 в 07:09
поделиться

11 ответов

Я редко пишу блоки попытки/выгоды - большинство исключений выдается до (близости) вершина стека. Если мне действительно нужен блок попытки/выгоды, я не уверен, что я особенно последователен между вставлением его using оператор по сравнению с внешней стороной. Это действительно зависит от того, хотите ли Вы, чтобы ресурс был расположен прежде того, после того, как Ваш код обработки исключений выполняется.

Если Вы спрашиваете о том, когда необходимо писать using операторы - любое время, Вы "владеете" объектом, который реализует IDisposable (любой прямо или косвенно посредством наследования) и управление его время жизни. Это обычно - объект, который использует неуправляемый ресурс как дескриптор файла или сетевое соединение. Это не всегда чрезвычайно очевидно, но Вы учитесь через опыт. Почти что-либо, чтобы сделать с IO будет доступными дескрипторами, и Windows (для шрифтов и т.д.), подобны.

9
ответ дан 6 December 2019 в 05:08
поделиться

using может только использоваться с типами та реализация IDisposable; это гарантирует что Dispose() метод назовут, даже если ошибка произойдет.

Этот код:

using (MyDisposableType x = new MyDisposableType())
{  
    // use x
}

эквивалентно этому:

MyDisposableType x = new MyDisposableType();
try
{  
    // use x
}
finally 
{ 
    x.Dispose(); 
}
18
ответ дан 6 December 2019 в 05:08
поделиться

Я использую для размышления о нем как об "Использовании он каждый раз, когда тип реализует IDisposable, и Вы Вы не собираетесь нуждаться в этом конкретном экземпляре больше".

3
ответ дан 6 December 2019 в 05:08
поделиться

Если Вы хотите знать, как творчески использовать его в рамках Ваших собственных проектов, просмотреть часть Вашего собственного кода для ситуаций, где конкретный бит кода абсолютно должен выполниться, прежде чем из блока включения выходят. Это ситуации где try/finally или using может помочь Вам.

В частности, если Вы попытались достигнуть этого путем ловли всех исключений, затем действительно необходимо измениться на try/finally или using вместо этого.

Если шаблон несколько раз происходит, Вы могли бы создать класс, который реализует IDisposable для получения шаблона и разрешения Вам вызвать шаблон с using оператор. Но если у Вас есть конкретный случай, который, кажется, одноразовое, затем просто использует try/finally.

Эти два очень похожи, действительно - using указан с точки зрения try/finally, но даже если мы только имели using, мы могли создать try/finally самостоятельно:

public class DisposeAnything : IDisposable
{
    public Action Disposer;

    public void Dispose()
    {
        Disposer();
    }
}

Теперь Вы могли сказать:

using (new DisposeAnything 
      {
          Disposer = () => File.Delete(tempFileName) 
      })
{
    // blah
}

Который совпадает с:

try
{
    // blah
}
finally
{
    File.Delete(tempFileName);
}

Просто думайте о нем как о способе заставить некоторый код выполняться после отъезда объема.

2
ответ дан 6 December 2019 в 05:08
поделиться

Плюс что Mitch сказал..

Можно использовать оператор использования внутри или снаружи попытки.. выгода блокирует его, действительно зависел бы от того, чего Вы пытаетесь достигнуть т.е. ожидаете ли Вы обоснованно, что что-то выдаст исключение при использовании конкретного объекта, который Вы планируете восстановить с, например.

К тому же Вы могли также Избавиться от объекта, который реализует IDisposable в наконец блок, если Вы должны были.

1
ответ дан 6 December 2019 в 05:08
поделиться

Если класс реализует IDisposable, это, вероятно, на серьезном основании. Таким образом, любой класс, который реализует IDisposable, должен быть расположен.

1
ответ дан 6 December 2019 в 05:08
поделиться

Можно включить использование в блоке попытки/выгоды, и можно включить блок попытки/выгоды в использовании.

Одна ситуация, где использование хорошо, состоит в том при выполнении операций базы данных с помощью DBConnection и DBCommands:

using (SqlConnection conn = new SqlConnection(connectionString))
using (SqlCommand command = new SqlCommand(sql, conn))
{
  // do something here
}

Теперь, когда Вы уезжаете, использование блокируется, Ваша команда расположена, и соединение закрывается.

1
ответ дан 6 December 2019 в 05:08
поделиться

То, что сказал Mitch, правильно. Таким образом, основное использование использования должно гарантировать, что от объектов IDisposable избавляются, не имея необходимость кодировать оператор попытки/выгоды или попытки/наконец.

Теперь, существует более усовершенствованное использование, которое Вы могли бы найти интересным также. При использовании оператора использования компилятор генерирует попытку/наконец, и он также генерирует вызов для Расположения () для Вас в наконец, что он генерирует. Можно использовать, это Располагает () метод как "рычаг", чтобы сделать что-либо, что Вы хотите... не должен быть связан с высвобождением средств.

Например, Jeffrey Richter использует это в объекте - таймере, который он записал. Можно сделать что-то вроде этого с ним (концептуальный только):

using(var x = new Timer())
{
  // Do the operation you want timed
}

// Now, the timer has been stopped, because the 
// compiler-generated call to Dispose() has already 
// occurred, and Jeffrey uses Dispose() to stop 
// the timer.
1
ответ дан 6 December 2019 в 05:08
поделиться

Учитывая, что это - то, что известно как "синтаксический сахар" и произведет тот же IL, как попытка/наконец располагает конструкцию, это - действительно просто хороший способ "сокращения" такой код.

Мне нравится использовать его для упрощения разделов кода, где доступные объекты используются много т.е. доступ к ресурсам, таким как файлы и графические объекты, и я хочу удостовериться, что я не забываю обрабатывать избавление от объекта ресурса.

1
ответ дан 6 December 2019 в 05:08
поделиться

Я заметил что, когда Расположить метод, как известно, делает уведомление, таким образом, программисты не потрудились называть его, поскольку это кажется бессмысленным. Однако, если объект реализует IDisposable, это (надо надеяться), по причине, и будущие версии того объекта могут на самом деле иметь код в Расположить методе - поэтому всегда называют его.

0
ответ дан 6 December 2019 в 05:08
поделиться

Используйте использование при необходимости в детерминированном объектном распоряжении. Например, при открытии файла файл заблокирован. Вы будете часто хотеть, чтобы файл был закрыт как можно скорее так, чтобы другие программы могли получить доступ к нему. Если Вы не используете использование и пишете что-то как:

System.IO.FileStream writeStream = new System.IO.FileStream( fileName, System.IO.FileMode.OpenOrCreate ) );
System.IO.BinaryWriter writer = new System.IO.BinaryWriter( writeStream ) );
//do smth 

и исключение происходит во время, "делают что-то", Вы не знаете, когда объекты, воздействующие на файл, на самом деле расположены, и файл закрывается. С использованием Вы знаете наверняка что, после того как Вы оставили блок операторов использования - или непосредственно или через исключение, которое объект в useing операторе расположен путем вызова IDisposable:: Расположите:

using( System.IO.FileStream writeStream = new System.IO.FileStream( fileName, System.IO.FileMode.OpenOrCreate ) ) {
    using( System.IO.BinaryWriter writer = new System.IO.BinaryWriter( writeStream ) ) {
        //do stmth
    }
}
1
ответ дан 6 December 2019 в 05:08
поделиться
Другие вопросы по тегам:

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