Различают две концепции сравнения значений: сравнение эквивалентности и сравнение порядка. Сравнение эквивалентности предназначено для проверки являются ли два экземпляра одинаковыми. Сравнение порядка выясняет, какой из двух экземпляров будет расположен первым в случае расположения их по возрастанию или убыванию. Ни та, ни другая концепция не являются подмножеством другой, они независимы, и экземпляры могут быть равны с позиции порядка, но не равны с позиции эквивалентности.
Метка: C#
C#: домены приложений (Application Domains)
Домен приложения — это своеобразный контейнер, внутри которого запускается программа, и который изолирует ее во время выполнения. Домен задает границы управляемой памяти для приложения и является контейнером для загруженных сборок и параметров конфигурации приложения. Каждый процесс обычно размещает только один домен приложения — стандартный домен, автоматически созданный CLR при запуске процесса. Однако в рамках одного процесса возможно создавать дополнительные домены приложений.
C#: сборки (Assemblies)
Сборка представляет собой одиночный файл Portable Executable (PE) с расширением .exe в случае приложения или .dll в случае многократно используемой библиотеки.
C#: XML документирование
Документирующие комментарии используют синтаксис XML и позволяют документировать типы и их члены. Документирующий комментарий должен идти непосредственно перед объявлением типа или его члена и начинаться с трех слэшей:
C#: небезопасный код и указатели
C# поддерживает прямое управление памятью с помощью указателей в пределах блоков кода помеченных как небезопасный код и при условии компиляции с параметром /unsafe
. Указатели могут быть полезны при работе с API написанными на C, а также для доступа к памяти вне управляемого хипа (heap) или особо критичных в плане производительности местах.
C#: асинхронные функции
В C# 5.0 добавлены ключевые слова await
и async
для поддержки асинхронного программирования — стиля программирования, когда длительные по времени выполнения функции проделывают всю или большую часть своей работы после возврата контроля в точку вызова. В противоположность этому при обычном — синхронном — программировании длительные функции блокируют вызвавший их код пока не завершат свое выполнение. Асинхронное программирование предполагает параллелизм (параллельное выполнение нескольких операций), когда длительные операции выполняются параллельно с вызвавшим их кодом. Параллельное выполнение асинхронных функций реализуется либо через многопоточность (для операций, зависящих только от быстродействия процессора — compute-bound), либо через механизм обратного вызова (для операций, ограниченных скоростью ввода/вывода данных — I/O-bound).
C#: динамическое связывание (Dynamic Binding)
Связывание — это процесс разрешения, или соотнесения идентификаторов типов (членов типа, операций) с логическими частями программы, представляющими соответствующие типы. Как правило это процесс происходит во время компиляции, когда компилятор находит в исходном коде идентификаторы типов и соотносит их с соответствующей логикой.
C#: анонимные типы
Анонимный тип — простейший класс, созданный на лету, чтобы сохранить набор значений. Создать анонимный тип можно с помощью ключевого слова new
, после которого идет инициализатор объекта, задающий значения свойств анонимного типа.
C#: перегрузка операторов
Операторы могут быть перегружены, чтобы обеспечить более естественный синтаксис для пользовательских типов. В большей степени это актуально для реализации пользовательских структур, представляющих довольно простые типы данных.
C#: типы, допускающие значение Null (Nullable Types)
Ссылочные типы могут иметь значение null
, если ссылка не ссылается ни на какой объект. В противоположность им значимые типы не могут иметь значение null
.
1 2 | string s = null; // Допустимо, строка - ссылочный тип int i = null; // Ошибка при компиляции - int не может иметь значение null |
Чтобы сделать возможным для значимых типов принимать значение null
, нужно использовать специальную конструкцию — тип, допускающий значение null (nullable type). Чтобы превратить значимый тип в тип, допускающий значение null, нужно при объявлении переменной непосредственно после указания ее (значимого) типа поставить знак ?
:
1 2 | int? i = null; // тип, допускающий значение null - Nullable Type Console.WriteLine (i == null); // True |
Читать далее C#: типы, допускающие значение Null (Nullable Types)