Каковы виды использования «using» в C # - PullRequest
289 голосов
/ 16 сентября 2008

Пользователь kokos ответил на замечательный вопрос Скрытые возможности C # , упомянув ключевое слово using. Можете ли вы уточнить это? Каковы виды использования using?

Ответы [ 29 ]

4 голосов
/ 16 сентября 2008

Интересно, что вы также можете использовать шаблон использования / IDisposable для других интересных вещей (например, другой момент, которым его использует Rhino Mocks). В принципе, вы можете воспользоваться тем фактом, что компилятор будет всегда вызывать .Dispose для "используемого" объекта. Если у вас есть что-то, что должно произойти после определенной операции ... что-то с определенным началом и концом ... тогда вы можете просто создать класс IDisposable, который начинает операцию в конструкторе, а затем завершается в методе Dispose.

Это позволяет вам использовать действительно хороший синтаксис для обозначения явного начала и конца указанной операции. Так же работает система System.Transactions.

4 голосов
/ 10 апреля 2014

Вы можете использовать пространство имен псевдонимов в следующем примере:

using LegacyEntities = CompanyFoo.CoreLib.x86.VBComponents.CompanyObjects;

Это называется с использованием директивы псевдонима , поскольку, как вы можете видеть, ее можно использовать для сокрытия длинных ссылок, если вы хотите, чтобы в вашем коде было очевидно, на что вы ссылаетесь например,

LegacyEntities.Account

вместо

CompanyFoo.CoreLib.x86.VBComponents.CompanyObjects.Account

или просто

Account   // It is not obvious this is a legacy entity
3 голосов
/ 16 сентября 2008

«использование» также может использоваться для разрешения конфликтов пространства имен. См. http://www.davidarno.org/c-howtos/aliases-overcoming-name-conflicts/ для краткого учебника, который я написал по этому вопросу.

3 голосов
/ 16 сентября 2008

При использовании ADO.NET вы можете использовать клавиши для таких вещей, как объект подключения или объект чтения. Таким образом, когда блок кода завершится, он автоматически избавится от вашего соединения.

3 голосов
/ 01 ноября 2012
public class ClassA:IDisposable

{
   #region IDisposable Members        
    public void Dispose()
    {            
        GC.SuppressFinalize(this);
    }
    #endregion
}

public void fn_Data()

    {
     using (ClassA ObjectName = new ClassA())
            {
                //use objectName 
            }
    }
1 голос
/ 16 сентября 2008

Синтаксис для записи и воспроизведения Rhino Mocks интересно использует using.

1 голос
/ 15 октября 2008

Все, что находится вне фигурных скобок, расположено так, что было бы здорово избавиться от ваших предметов, если вы ими не пользуетесь. Это так, потому что если у вас есть объект SqlDataAdapter, и вы используете его только один раз в жизненном цикле приложения, и вы заполняете только один набор данных, и он вам больше не нужен, вы можете использовать код:

using(SqlDataAdapter adapter_object = new SqlDataAdapter(sql_command_parameter))
{
   // do stuff
} // here adapter_object is disposed automatically
1 голос
/ 16 сентября 2008

Благодаря комментариям ниже, я немного уберу этот пост (я не должен был использовать слова «сборка мусора» в то время, извинения):
Когда вы используете с помощью, он вызовет метод Dispose () для объекта в конце области использования. Таким образом, вы можете иметь довольно много отличного кода для очистки в вашем методе Dispose ().
Пуля, которая, как мы надеемся, может получить это незаметно: Если вы реализуете IDisposable, убедитесь, что вы вызываете GC.SuppressFinalize () в вашей реализации Dispose (), так как в противном случае автоматическая сборка мусора попытается прийти и завершить ее в некоторых точка, которая, по крайней мере, была бы пустой тратой ресурсов, если вы уже удалили () d из нее.

1 голос
/ 16 сентября 2008

Ключевое слово using определяет область действия объекта, а затем удаляет объект после завершения области действия. Например.

using (Font font2 = new Font("Arial", 10.0f))
{
    // use font2
}

См. здесь для статьи MSDN о C # с использованием ключевого слова.

1 голос
/ 16 сентября 2008

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

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

Используемый ресурс должен реализовывать IDisposable для правильной работы.

Пример:

using (File file = new File (parameters))
{
    *code to do stuff with the file*
}
...