Speak.Me Учить иностранные слова

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)

C#: лямбда выражения (Lambda Expressions)

Лямбда выражения — это безымянные методы, написанные вместо экземпляра делегата. При компиляции лямбда выражения преобразуются  либо в экземпляры делегата либо в дерево выражений, имеющее тип Expression<TDelegate> (это позволяет перевести код выражения в объект и интерпретировать его позже — во время выполнения).

Читать далее C#: лямбда выражения (Lambda Expressions)

C#: события (Events)

Событие — это член типа, с помощью которого этот тип (или его экземпляр) может уведомлять другие объекты о наступлении особых ситуациях (т.е. уведомлять о наступлении определенных «событий»), например, клик по кнопке, получение письма и т.д. Другие объекты, получив такое уведомление, смогут на него отреагировать, выполнив определенные действия. События — член типа, обеспечивающий такого рода взаимодействие объектов.

Читать далее C#: события (Events)

C#: делегаты (Delegates)

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

Читать далее C#: делегаты (Delegates)