Pull to refresh

Comments 4

По-моему, с коллекциями(массивами?) есть ещё проблемы при маршалинге с нулевом количестве элементов.
«Есть еще одна особенность — система типов WinRT не разрешает строкам принимать значение null. Вместо null для передачи пустой строки следует использовать String.Empty. „

Здесь стоит уточнить. В самом WinRT есть такая штука, как нулевой HSTRING (т.е., когда хэндл == NULL). Но спецификация системы типов определяет такую строку во всем эквивалентной пустой строке. Поэтому она не может быть использована для передачи отличия между null и “» в managed-коде — и, соответственно, авторами проекции CLR было принято решение полностью запретить null для строк, чтобы программисты не путались, почему они передают null со стороны C#, и получают "" в C++/CX.
Еще один момент. Система типов и её проекция на CLR была специально сделана таким образом, что практически все трансформации можно делать на уровне таблиц метаданнных при их чтении — т.е. изменения будут затрагивать только одну строку, которая сейчас читается, а не идти каскадом. Это позволяет компиляторам managed-языков игнорировать всю эту машинерию, если они работают с метаданными через IMedaDataDispenser — он автоматически будет делать все необходимые подстановки. С другой стороны, иногда хочется получить эти таблицы в «сыром» виде — например, если это не managed-компилятор, или если пишется тулза вроде ildasm — для этого есть CorOpenFlags::ofNoTransform.

Единственное исключение здесь — это паттерн для событий, который отличается от обычного дотнетовского. Его компиляторам приходится поддерживать напрямую.
Sign up to leave a comment.

Articles