Jump to content

Преобразуемые типы

(Перенаправлено с Blittable Types )

Преобразуемые типы — это типы данных в Microsoft .NET Framework , которые имеют идентичное представление в памяти как для управляемого , так и для неуправляемого кода. Понимание разницы между преобразуемыми и непреобразуемыми типами может помочь в использовании COM Interop или P/Invoke — двух методов взаимодействия в приложениях .NET.

Источник

[ редактировать ]

Операцию копирования памяти иногда называют передачей блоков , сокращенно до бит-блит (а специальное оборудование для такой передачи называется блиттером ). Blittable — это специфичный для .NET термин, обозначающий, разрешено ли копировать объект с помощью блочной передачи.

Обзор совместимости

[ редактировать ]

Взаимодействие может представлять собой двунаправленный обмен данными и методами между неуправляемым кодом и управляемым кодом .NET . .NET предоставляет два способа взаимодействия между ними: COM Interop и P/Invoke. Хотя методология разная, в обоих случаях должна иметь место маршалинг (преобразование между представлениями данных, форматами вызова функций и форматами возврата значений). COM Interop занимается этим преобразованием между управляемым кодом и COM-объектами , тогда как P/Invoke обрабатывает взаимодействие между управляемым кодом и Win32 кодом . Концепция преобразуемых и непреобразуемых типов данных применима к обоим, особенно к проблеме преобразования данных между управляемой и неуправляемой памятью. Этот маршалинг выполняется маршаллером взаимодействия, который автоматически вызывается средой CLR при необходимости.

Определены преобразуемые типы

[ редактировать ]

Преобразуемый тип — это тип данных, который не требует особого внимания со стороны маршалера взаимодействия, поскольку по умолчанию он имеет общее представление в управляемой и неуправляемой памяти. Закрепив данные в памяти, сборщик мусора не сможет их переместить, что позволит совместно использовать их на месте с неуправляемым приложением. [ 1 ] Это означает, что как управляемый, так и неуправляемый код будут изменять ячейки памяти этих типов согласованным образом, и маршалеру потребуется гораздо меньше усилий для поддержания целостности данных. Ниже приведены некоторые примеры преобразуемых типов, доступных в .NET Framework: [ 2 ]

  • System.Byte
  • System.SByte
  • System.Int16
  • System.UInt16
  • System.Int32
  • System.UInt32
  • System.Int64
  • System.UInt64
  • System.IntPtr
  • System.UIntPtr
  • System.Single
  • System.Double

Кроме того, одномерные массивы этих типов (включая небезопасные фиксированные буферы ), а также сложные типы, содержащие только поля экземпляров (включая поля только для чтения ) этих типов, являются blitable. Наличие статических или константных полей, которые не могут быть преобразованы, не приводит к тому, что тип становится непреобразуемым, поскольку такие поля не играют никакой роли в маршалинге. Сложные типы (то есть структуры или классы) также должны иметь макет поля экземпляра Sequential , примененный с использованием атрибута [StructLayout], чтобы маршалер .NET считал их переносимыми. Этот атрибут применяется к структурам автоматически компилятором, но его необходимо явно добавить в определение класса, чтобы сделать класс, который иначе не может быть преобразован в преобразование, может быть преобразован.

Если тип не является одним из преобразуемых типов, он классифицируется как непреобразуемый. Причина, по которой тип считается непреобразуемым, заключается в том, что одно представление в управляемой памяти может иметь несколько потенциальных представлений в неуправляемой памяти или наоборот. Альтернативно, как в управляемой, так и в неуправляемой памяти может существовать ровно одно представление типа. Также часто бывает так, что ни с той, ни с другой стороны просто нет представительства. Ниже приведены некоторые часто используемые непреобразуемые типы в .NET Framework: [ 2 ]

  • System.Boolean
  • System.Char
  • System.Object
  • System.String

Существует гораздо больше преобразуемых и непреобразуемых типов, а определяемые пользователем типы могут относиться к любой категории в зависимости от того, как они определены (MSDN).

Использование

[ редактировать ]

Это весьма ограничительное понятие преобразуемых типов, по-видимому, ограничивает полезность служб совместимости, предоставляемых .NET, но это не так. Хотя преобразуемые типы допускают прямое определение взаимодействующих типов, существуют различные способы явного определения того, как непреобразуемый тип должен быть преобразован маршалером взаимодействия. [ 3 ] [ 4 ] Например, в языках .NET существует множество атрибутов, которые можно применять к полям типов, к самим типам и параметрам методов, чтобы указать маршалеру, как обрабатывать эти конкретные данные. Эти атрибуты имеют различные цели, например, для детализации упаковки или выравнивания типа, указания смещений полей в типе, указания представления массива или строки, управления стилем передачи параметров для вызовов функций, указания методов управления памятью и т. д. Если ни один из атрибутов или других инструментов, предусмотренных в структуре, не является адекватным, детальный контроль обеспечивается за счет возможности реализовать ICustomMarshaler интерфейс и вручную выполнить преобразование данных в обоих направлениях. Понимание того, что представляет собой преобразуемый тип, позволяет разработчику определять ситуации, когда вмешательство требуется или не требуется для правильного маршалинга типа. Таким образом, меньше времени тратится на чрезмерную спецификацию типов или вызовов функций.

См. также

[ редактировать ]
  1. ^ «Журнал MSDN — новый взгляд на P/Invoke» . Msdn.microsoft.com . Проверено 5 декабря 2011 г.
  2. ^ Jump up to: а б «MSDN — преобразуемые и непреобразуемые типы» . Msdn.microsoft.com . Проверено 5 февраля 2016 г.
  3. ^ «MSDN — Обзор маршалинга взаимодействия» . Msdn.microsoft.com . Проверено 5 февраля 2016 г.
  4. ^ «Взаимодействие MSDN и .NET» . Msdn2.microsoft.com . Проверено 5 декабря 2011 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: d80baf72451423dd900d6328ebec5301__1697820360
URL1:https://arc.ask3.ru/arc/aa/d8/01/d80baf72451423dd900d6328ebec5301.html
Заголовок, (Title) документа по адресу, URL1:
Blittable types - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)