Net framework 5, а также среды Visual Studio 2012 и C#


Глава 18.  настраиваемые



Download 6,27 Mb.
Pdf ko'rish
bet336/658
Sana12.06.2023
Hajmi6,27 Mb.
#950840
1   ...   332   333   334   335   336   337   338   339   ...   658
Bog'liq
CLR via C Programmirovanie na platforme Microsoft NET Framework 4 5 na yazyke C

Глава 18.
 настраиваемые 
атрибуты
В этой главе описывается один из самых новаторских механизмов Microsoft .NET 
Framework — механизм 
настраиваемых атрибутов
(custom attributes). Именно на-
страиваемые атрибуты позволяют снабжать кодовые конструкции декларативными 
аннотациями, наделяя код особыми возможностями. Настраиваемые атрибуты 
дают возможность задать информацию, применимую практически к любой записи 
таблицы метаданных. Информацию об этих расширяемых метаданных можно запра-
шивать во время выполнения с целью динамического изменения хода выполнения 
программы. Настраиваемые атрибуты применяются в различных технологиях .NET 
Framework (Windows Forms, WPF, WCF и т. п.), что позволяет разработчикам легко 
выражать свои намерения в коде. Таким образом, умение работать с настраиваемыми 
атрибутами необходимо всем разработчикам .NET Framework.
сфера применения 
настраиваемых атрибутов
Атрибуты 
public

private

static
и им подобные применяются как к типам, так 
и к членам типов. Никто не станет спорить с тем, что атрибуты полезны — но 
как насчет возможности задания собственных атрибутов? Предположим, нужно 
не просто определить тип, но и каким-либо образом указать на возможность его 
удаленного использования посредством сериализации. Или, к примеру, назначить 
методу атрибут, который означает, что для выполнения метода должны быть полу-
чены некоторые разрешения безопасности.
Разумеется, создавать настраиваемые атрибуты и применять их к типам и мето-
дам очень удобно, однако для этого компилятор должен распознавать эти атрибуты 
и заносить соответствующую информацию в метаданные. Фирмы-разработчики 
предпочитают не публиковать исходный код своих компиляторов, поэтому спе-
циалисты Microsoft предложили альтернативный способ работы с настраиваемыми 
атрибутами, которые представляют собой мощный механизм, полезный как при 
разработке, так и при выполнении приложений. Определять и задействовать на-
страиваемые атрибуты может кто угодно, а все CLR-совместимые компиляторы 
должны их распознавать и генерировать соответствующие метаданные.
Следует понимать, что настраиваемые атрибуты представляют собой лишь 
средство передачи некой дополнительной информации. Компилятор помещает 


465
Сфера.применения.настраиваемых.атрибутов
эту информацию в метаданные управляемого модуля. Большая часть атрибутов 
для компилятора просто не имеет значения; он обнаруживает их в исходном коде 
и создает для них соответствующие метаданные.
Библиотека классов .NET Framework (FCL) включает определения сотен на-
страиваемых атрибутов, которые вы можете использовать в своем коде. Вот не-
сколько примеров:
‰
Атрибут 
DllImport
при применении к методу информирует CLR о том, что метод 
реализован в неуправляемом коде указанной DLL-библиотеки.
‰
Атрибут 
Serializable
при применении к типу информирует механизмы се-
риализации о том, что экземплярные поля доступны для сериализации и десе-
риализации.
‰
Атрибут 
AssemblyVersion
при применении к сборке задает версию сборки.
‰
Атрибут 
Flags
при применении к перечислимому типу превращает перечисли-
мый тип в набор битовых флагов.
Рассмотрим код с множеством примененных к нему атрибутов. В C# имена на-
страиваемых атрибутов помещаются в квадратные скобки непосредственно перед 
именем класса, объекта и т. п. Не пытайтесь понять, что именно делает код; я всего 
лишь хочу показать, как выглядят атрибуты:
using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
internal sealed class OSVERSIONINFO {
public OSVERSIONINFO() {
OSVersionInfoSize = (UInt32) Marshal.SizeOf(this);
}
public UInt32 OSVersionInfoSize = 0;
public UInt32 MajorVersion = 0;
public UInt32 MinorVersion = 0;
public UInt32 BuildNumber = 0;
public UInt32 PlatformId = 0;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public String CSDVersion = null;
}
internal sealed class MyClass {
[DllImport("Kernel32", CharSet = CharSet.Auto, SetLastError = true)]
public static extern Boolean GetVersionEx([In, Out] OSVERSIONINFO ver);
}
В данном случае атрибут 
StructLayout
применяется к классу 
OSVERSIONINFO

атрибут 
MarshalAs
— к полю 
CSDVersion
, атрибут 
DllImport
— к методу 
GetVersionEx

а атрибуты 
In
и 
Out
— к параметру 
ver
метода 
GetVersionEx
. В каждом языке опре-


466
Download 6,27 Mb.

Do'stlaringiz bilan baham:
1   ...   332   333   334   335   336   337   338   339   ...   658




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish