Кіріспе
Ортақ тілдік инфрақұрылым сыныптар мен сынып мүшелері туралы метадеректер. Ортақ тілдік инфрақұрылымда (CLI) метадеректер – кодтың жоғары деңгейлі құрылымын сипаттайтын ортақ аралық тіл (CIL) кодына енгізілген дерек құрылымдары. Метадеректер жиналымда анықталған барлық сыныптар мен сынып мүшелерін, сондай-ақ ағымдағы жиналымның басқа жиналымнан шақыратын сыныптар мен сынып мүшелерін сипаттайды. Әдістің метадеректерi әдістің толық сипаттамасын қамтиды, оның ішінде сыныпты (және сыныпты қамтитын жиналымды), қайтарым түрін және барлық әдіс параметрлерін. CLI тілінің компиляторы метадеректерді жасайды және оларды CIL кодын қамтитын жиналымға сақтайды. CIL орындалған кезде, шақырылған әдістің метадеректерi шақырушы әдісте сақталған метадеректермен сәйкес келеді дегенге көз жеткізіледі. Бұл әдісті параметрлердің нақты санымен және параметрлердің дұрыс түрлерімен ғана шақыруға мүмкіндік береді. Windows 8 және Windows Phone 8 жүйелерінде қолданылатын Windows Runtime қолданба платформасы, қолдау көрсетілетін кез келген бағдарламалау тілінде жазылған кодтың компоненттік интерфейстерін сипаттау үшін CLI метадеректер форматын пайдаланады. Common Language Runtime-дағы ерекшелік – жиналымдар әдетте CIL нұсқауларын қамтымайды.
Metadata, in the Common Language Infrastructure (CLI), refers to certain data structures embedded within the Common Intermediate Language (CIL) code that describes the high level structure of the code. Metadata describes all classes and class members that are defined in the assembly, and the classes and class members that the current assembly will call from another assembly. The metadata for a method contains the complete description of the method, including the class (and the assembly that contains the class), the return type and all of the method parameters. A CLI language compiler will generate the metadata and store this in the assembly containing the CIL. When the run time executes CIL it will check to make sure that the metadata of the called method is the same as the metadata that is stored in the calling method. This ensures that a method can only be called with exactly the right number of parameters and exactly the right parameter types. The Windows Runtime application platform, present in Windows 8 and Windows Phone 8, makes use of the CLI metadata format to describe component interfaces for code written in any of the supported programming languages. A difference in use within the Common Language Runtime is that an assembly typically does not contain any CIL instructions.
Метадеректерді сақтау
Ассембльдерде метадеректер кестелері болады. Бұл кестелер CIL спецификациясында сипатталған. Метадеректер кестелерінде нөл немесе одан көп жазбалар болады, ал жазбаның орны оның индексін анықтайды. CIL коды метадеректерді пайдаланғанда, ол метадеректер токені арқылы іске асырылады. Бұл 32 биттік мән, ондағы жоғарғы 8 бит тиісті метадеректер кестесін көрсетеді, ал қалған 24 бит кестедегі метадеректердің индексін анықтайды. Framework SDK құрамында ассембльдегі метадеректер кестелерін тізімдейтін мысал бар, бірақ бұл ақпарат әзірлеушіге көбінесе қажет болмайды. Ассембльдегі метадеректерді NET Framework SDK-мен ұсынылатын ILDASM құралын пайдаланып қарауға болады. CIL стандартында метадеректер ILAsm (ассемблирлік тіл) форматында, сақтау үшін дискідегі форматта және Портативті орындалатын (PE, exe немесе dll) форматтағы ассемблилерге енгізілген форматта анықталады. PE форматы дискідегі форматқа негізделген.
Ойлану
Рефлексия – CLI метадеректерін оқуға қолданылатын API. Рефлексия API, metainfo сияқты құралдар ұсынатын нақты көріністен гөрі, метадеректерінің логикалық көрінісін қамтамасыз етеді. NET фреймворкінің 1.1 нұсқасында рефлексияны сыныптар мен олардың мүшелерінің сипаттамаларын қарастыру және әдістерді шақыру үшін пайдалануға болады. Дегенмен, ол әдістің CIL кодына орындалу кезінде қол жеткізуге мүмкіндік бермейді. Фреймворктің 2.0 нұсқасы әдістің CIL кодын алуға рұқсат береді.
Басқа метадеректер құралдары
Атау кеңістігінен басқа, метадеректерді басқаруға арналған тағы да бірнеше құралдар бар. Microsoft .NET Framework жергілікті кодта іске асырылған CLR метадеректерді өңдеу кітапханасын қамтиды. Сондай-ақ, метадеректерді алу және өңдеу үшін PostSharp және Mono Cecil сияқты үшінші тарап құралдарын да пайдалануға болады.