Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Троелсен Э. -> "С# и платформа .NET. Библиотека программиста" -> 25

С# и платформа .NET. Библиотека программиста - Троелсен Э.

Троелсен Э. С# и платформа .NET. Библиотека программиста — СПб.: Питер, 2004. — 796 c.
ISBN 5-318-00750-3
Скачать (прямая ссылка): cplatforma2004.pdf
Предыдущая << 1 .. 19 20 21 22 23 24 < 25 > 26 27 28 29 30 31 .. 320 >> Следующая

В отличие от СОМ при использовании платформы .NET вам вообще не придется думать об IDL. Однако общий принцип описания типов в строго определенном двоичном формате остался.
i
Компиляция IL в платформенно-зависимые инструкции 41
Сборки .. всегда содержат полные и точные метаданные, поскольку ж-га данные в них генерируются автоматически. Как и в IDL, в метаданных .NET содержится исчерпывающая информация об абсолютно всех типах, которые используются в сборке (классах, структурах, перечислениях и прочем), а также о каждом свойстве, методе или событии каждого типа.
Еще одно отличие метаданных .NET от информации IDL заключается в том, что метаданные .NET гораздо более подробны. В них перечислены все ссылки на внешние модули и сборки, которые потребуются для нормального выполнения сборки .NET. За счет этого можно считать сборки .NET фактически самодокументируемыми. В результате, к примеру, отпадает необходимость регистрировать двоичные файлы .NET в системном реестре (подробнее об этом будет сказано ниже).
Простой пример метаданных
Вот пример метаданных для метода MoX і нашего приложения CSharpCalculalo; (метаданные для этого метода в VBCalculator будут точно такими же):
Method #2
Add (060U0ULI2)
[Public] [HideBySig] [Reuseslot] (00000086) 0x00002058
[IL] [Managed] (00000000)
[DEFAULT]
MethodName Flags
RVA
ImplFlags CalcCnvntn hasThis
ReturnTvpe :
2 ArgumenLs
ArgumenL #1: 14
ArgumenL #2: 14 2 Parameters
(1) ParamToken : (U8000001) Name : x flags: [none] (0O0OGQU0) default:
(2) ParamToken : (08000002) Name : у flags: [none] (00000000) default:
В коде ясно представлены название метода, тип возвращаемого значения и дан, ные об ожидаемых аргументах. Как мы помним, вручную никаких метаданных мы: не писали — за нас все сделал компилятор С#.
Кто будет обращаться к метаданным? И сама среда выполнения .NET (очені, часто), и самые разные средства разработки и отладки. Например, средство IntelIiSense в Visual Studio.Net (которое пытается помочь вам закончить начатую строку) берет необходимую ему информацию именно из метаданных. Метаданные активно используются утилитами просмотра, отладки и, конечно, самим комди лятором
Компиляция IL в платформенно-зависимые инструкции
Поскольку в сборках, как мы ьыяснпди, содержится шіатформеино-независкмьш код IL, а выполняются в конечном итоге именно платформенно-зависимые инструкции, кто-то должен взять на себя работу по компиляции IL в такие инструк ции. Этот «кто-то» называется "just-in-time compiler" (JIT) - компилятор времени выполнения. JIT часто ласково называют "jitter" (дрожание, трепет). JIT для
42 Глава 1 • Философия KET
перевода IL в инструкции входит в состав среды вы-
полнения .NET. Используя код IL, разработчики могут не думать об особенностях архитектуры CPU данного компьютера — эти особенности будут учтены JIT.
Откомпилированные из IL платформенно-зависимые инструкции JIT помещает в кэш-памяти, что очень сильно ускоряет работу приложения. Предположим, был вызван метод Ваг() класса Foo. При первом вызове этого метода JIT откомпилирует относящийся к этому методу код IL в платформенно-зависимые инструкции. При повторных вызовах этого метода JIT уже не будет заниматься компиляцией, а просто возьмет уже готовый откомпилированный код из кэша в оперативной памяти.
Типы и пространства имен .NET
Сборка (не важно, однофайловая или многофайловая) может содержать любое количество самых разных типов. В мире .NET тип — это общий термин, который может относиться к классам, структурам, интерфейсам, перечислениям и прочему. При создании приложения .NET (например, на языке С#) вам потребуется организовывать взаимодействие этих типов. Например, сборка может определять класс с несколькими интерфейсами; один интерфейс может принимать в качестве параметров только значения определенного перечисления.
У вас есть возможность использовать пространства имен при создании ваших собственных типов. Пространство имен — это логическая структура для организации имен, используемых в приложении .NET. Основное назначение пространств имен — предупредить возможные конфликты между именами в разных
сборках.
Вот пример: вы создаете приложение типа Windows Forms, которое обращается к двум внешним сборкам. В каждой сборке есть тип с именем GoCart, при этом эти типы отличаются друг от друга. При написании кода вы можете точно указать, к какому именно типу и из какой сборки вы обращаетесь. Для этого достаточно к имени типа добавить имя соответствующего пространства имен: например, CustomVehicals .GoCart или Sl owVehicals .GoCart. Более подробно мы разберем применение пространств имен ниже в этой главе.
Основы Common Language Runtime - - среды выполнения .NET
X
После того как мы познакомились с типами, сборками, метаданными и IL, настало время рассмотреть среду выполнения — более подробно. Среду выполнения (runtime) можно рассматривать как набор служб, необходимых для работы блока программного кода. К таким службам можно отнести и требуемые библиотеки. Например, если вы создали приложение MFC, то в качестве компонента среды
Предыдущая << 1 .. 19 20 21 22 23 24 < 25 > 26 27 28 29 30 31 .. 320 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100