Оглавление:
Определение - Что означают Атрибуты Направления?
Атрибуты направления в C # - это теги, используемые для указания параметров объекта метода с информацией, связанной с направленным потоком данных между вызывающей стороной и вызываемой стороной.
Атрибуты направления управляют маршалингом - когда объект подготовлен для передачи через границу приложения или процесса - направления и возвращаемых значений параметра метода. Атрибуты направления применяются для изменения маршалинга во время выполнения при передаче управляемого кода, который выполняется общеязыковой средой выполнения (CLR), и неуправляемого кода, который выполняется вне контроля CLR.
Техопедия объясняет Направленные Атрибуты
InAttribute и OutAttribute - это два атрибута направления C #, используемые для сопоставления с атрибутами языка определения интерфейсов (IDL) объектной модели компонентов (COM). InAttribute сопоставляется, а OutAttribute сопоставляется. Возвращаемое значение сигнатуры управляемого метода отображается в библиотеке типов. Важно указать правильный атрибут направления для параметров метода, чтобы библиотека экспортирующего типа правильно устанавливала биты ввода / вывода.
Применяя InAttribute и OutAttribute в массивах и отформатированных неблизких типах (которые не имеют общего представления управляемой и неуправляемой памяти), вызывающая сторона видит изменения вызываемого абонента. Атрибуты направления, применяемые к этим типам, уменьшают ненужные копии во время маршалинга.
В C # InAttribute и OutAttribute используются в трех формах с двумя ключевыми словами во время связи между вызывающими и вызываемыми абонентами, а именно:
- "out" - подразумевает
- "ref" - подразумевает,
- (Не указано) - (по умолчанию)
Ключевые слова out и ref используются для типов значений и сериализуемых ссылочных типов. Ключевое слово ref подразумевает, что параметр маршалируется в обоих направлениях, а out - передачу данных вызываемого абонента. Когда ref или out не используются, это означает, что данные передаются вызываемому абоненту.
Например, клиентское приложение .NET отправляет входное значение методу COM-компонента, который вычисляет результат входного значения и возвращает результат клиенту. Атрибуты направления могут применяться к параметрам метода, обслуживающего запрос, путем указания требуемого типа маршалинга для входного значения и результата.
Направленные атрибуты имеют следующие характеристики:
- Необязательно и применяется к параметрам метода во время разработки
- Поддерживается только для COM-взаимодействия и вызова платформы
- InAttribute нельзя применить к параметру с ключевым словом out
Маршалер взаимодействия CLR предоставляет сервис маршалинга во время выполнения, обрабатывая аргументы вызова метода и возвращая значения между управляемой и неуправляемой памятью. Если направленные атрибуты не определены, маршалер определяет направленный поток на основе типа параметра и модификатора (если есть). Маршалер работает следующим образом:
- Он не перезаписывает данные, передаваемые в качестве параметра «In» из неуправляемого кода. Таким образом, могут передаваться только данные только для чтения, такие как данные, к которым обращаются одновременно.
- При передаче объектов - таких как базовые или двоичные строки (BSTR) - с установленным выделением памяти, правильная последовательность выделения / освобождения выполняется в соответствии с настройками In / Out.