C#: cравнение объектов

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

Читать далее C#: cравнение объектов

C#: домены приложений (Application Domains)

Домен приложения — это своеобразный контейнер, внутри которого запускается программа, и который изолирует ее во время выполнения. Домен задает границы управляемой памяти для приложения и является контейнером для загруженных сборок и параметров конфигурации приложения. Каждый процесс обычно размещает только один домен приложения — стандартный домен, автоматически созданный CLR при запуске процесса. Однако в рамках одного процесса возможно создавать дополнительные домены приложений.

Читать далее C#: домены приложений (Application Domains)

C#: XML документирование

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

Читать далее C#: XML документирование

C#: небезопасный код и указатели

C# поддерживает прямое управление памятью с помощью указателей в пределах блоков кода помеченных как небезопасный код и при условии компиляции с параметром /unsafe. Указатели могут быть полезны при работе с API написанными на C, а также для доступа к памяти вне управляемого хипа (heap) или особо критичных в плане производительности местах.

Читать далее C#: небезопасный код и указатели

C#: асинхронные функции

В C# 5.0 добавлены ключевые слова await и async для поддержки асинхронного программирования — стиля программирования, когда длительные по времени выполнения функции проделывают всю или большую часть своей работы после возврата контроля в точку вызова. В противоположность этому при обычном — синхронном — программировании длительные функции блокируют вызвавший их код пока не завершат свое выполнение. Асинхронное программирование предполагает параллелизм (параллельное выполнение нескольких операций), когда длительные операции выполняются параллельно с вызвавшим их кодом. Параллельное выполнение асинхронных функций реализуется либо через многопоточность (для операций, зависящих только от быстродействия процессора — compute-bound), либо через механизм обратного вызова (для операций, ограниченных скоростью ввода/вывода данных — I/O-bound).

Читать далее C#: асинхронные функции

C#: динамическое связывание (Dynamic Binding)

Связывание — это процесс разрешения, или соотнесения идентификаторов типов (членов типа, операций)  с логическими частями программы, представляющими соответствующие типы. Как правило это процесс происходит во время компиляции, когда компилятор находит в исходном коде идентификаторы типов и соотносит их с соответствующей логикой.

Читать далее C#: динамическое связывание (Dynamic Binding)

C#: анонимные типы

Анонимный тип — простейший класс, созданный на лету, чтобы сохранить набор значений. Создать анонимный тип можно с помощью ключевого слова new, после которого идет инициализатор объекта, задающий значения свойств анонимного типа.

Читать далее C#: анонимные типы

C#: перегрузка операторов

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

Читать далее C#: перегрузка операторов

C#: типы, допускающие значение Null (Nullable Types)

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

Чтобы сделать возможным для значимых типов принимать значение null, нужно использовать специальную конструкцию — тип, допускающий значение null (nullable type). Чтобы превратить значимый тип в тип, допускающий значение null, нужно при объявлении переменной непосредственно после указания ее (значимого) типа поставить знак ?:

Читать далее C#: типы, допускающие значение Null (Nullable Types)