Архив для категории: ‘C#’

Сравнение делегирования и композиции с наследованием

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

Читать далее »

Обеспечение нейтральности к исключениям

Когда исключения были впервые добавлены к С++, многие разработчики были впечатлены возможностью генерировать их, перехватывать и обрабатывать. Фактически в то время существовало распространенное заблуждение, что обработка исключений состоит из стратегического размещения операторов try по всему коду и добавления throw при необходимости.

Читать далее »

Объекты синхронизации Win32 и WaitHandle

В предъщущих двух разделах рассказывалось об объектах Mutex, ManualResetEvent и AutoResetEvent. Каждый из этих типов наследуется от WaitHandle — общего механизма, который можно использовать в .NET Framework для управления любого рода объектами синхронизации Win32.

Читать далее »

Определение пространств имен в C#

Синтаксис объявления пространства имен прост. В следующем коде демонстрируется объявление пространства имен Acme: 1 2 3 4 namespace Acme { class Utility {} }

Читать далее »

Обобщенные системные коллекции

Похоже, что наиболее естественное применение обобщений в С# и CLR относится к типам коллекций. Возможно, это потому, что за счет применения для хранения типов значений обобщенных контейнеров можно получить огромный прирост эффективности по сравнению с типами коллекций из пространства имен System.Collections.

Читать далее »

Класс SpinLock в C#

В библиотеке .NET 4.0 BCL появился новый тип System.Threading.SpinLock. Его определенно следует использовать вместо класса MySpinLock. SpinLock должен использоваться, когда есть обоснованные ожидания относительно того, что захват блокировок редко будет связан с ожиданием.

Читать далее »

Базовая структура нейтрального к исключениям кода

Общая идея, лежащая в основе написания нейтрального к исключениям кода, подобна идее, лежащей в основе кода фиксации/отката (commit/rollback). При этом пишется такой код, который гарантирует, что если его выполнение не завершено, то вся операция отменяется без каких-либо последствий для состояния системы. Изменения в состоянии фиксируются только в том случае, когда код достигает конечной точки выполнения.

Читать далее »

Типы и форматы перегруженных операций

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

Читать далее »

Синхронизация работы между потоками в C#

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

Читать далее »

Примеры строкового форматирования в пользовательских типах

Давайте рассмотрим другой пример использования знаменитого типа Complex. На этот раз попробуем реализовать IFormattable, чтобы сделать его несколько более удобным для генерации строковой версии экземпляра. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 […]

Читать далее »
 
Rambler's Top100