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


field : SomeAttr] // Применяется к полям, созданным компилятором [ method



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

field
: SomeAttr] // Применяется к полям, созданным компилятором
[
method
: SomeAttr] // Применяется к созданным 
// компилятором методам add и remove
public event EventHandler SomeEvent;
}
Теперь, когда вы знаете, как применять настраиваемые атрибуты, давайте раз-
беремся, что они собой представляют. Настраиваемый атрибут — это всего лишь 


467
Сфера.применения.настраиваемых.атрибутов
экземпляр типа. Для соответствия общеязыковой спецификации (CLS) он дол-
жен прямо или косвенно наследовать от абстрактного класса 
System.Attribute

В C# допустимы только CLS-совместимые атрибуты. В документации на .NET 
Framework SDK можно обнаружить определения следующих классов из предыду-
щего примера: 
StructLayoutAttribute

MarshalAsAttribute

DllImportAttribute

InAttribute
и 
OutAttribute
. Все они находятся в пространстве имен 
System.
Runtime.InteropServices
, при этом классы атрибутов могут определяться в любом 
пространстве имен. Можно заметить, что все перечисленные классы являются произ-
водными от класса 
System.Attribute
, как и положено CLS-совместимым атрибутам.
ПриМеЧание
При.определении.атрибута.компилятор.позволяет.опускать.суффикс.Attribute,.что.
упрощает.ввод.кода.и.делает.его.более.читабельным .Я.активно.использую.эту.воз-
можность.в.приводимых.в.книге.примерах.—.например,.пишу.[DllImport( )].вместо.
[DllImportAttribute( )] 
Как уже упоминалось, атрибуты являются экземплярами класса. И этот класс 
должен иметь открытый конструктор для создания экземпляров. А значит, синтаксис 
применения атрибутов аналогичен вызову конструктора. Кроме того, используемый 
язык может поддерживать специальный синтаксис определения открытых полей 
или свойств класса атрибутов. Рассмотрим это на примере. Вернемся к приложению, 
в котором атрибут 
DllImport
применяется к методу 
GetVersionEx
:
[DllImport("Kernel32", CharSet = CharSet.Auto, SetLastError = true)]
Выглядит довольно странно, но вряд ли вы будете когда-нибудь использо-
вать подобный синтаксис для вызова конструктора. Согласно описанию класса 
DllImportAttribute
в документации, его конструктор требует единственного па-
раметра типа 
String
. В рассматриваемом примере в качестве параметра передается 
строка 
"Kernel32"
. Параметры конструктора называются 
позиционными
(positional 
parameters); при применении атрибута следует обязательно их указывать.
А что с еще двумя «параметрами»? Показанный особый синтаксис позволяет 
задавать любые открытые поля или свойства объекта 
DllImportAttribute
после его 
создания. В рассматриваемом примере при создании этого объекта его конструк-
тору передается строка 
"Kernel32"
, а открытым экземплярным полям 
CharSet
и 
SetLastError
присваиваются значения 
CharSet.Auto
и 
true
соответственно. 
«Параметры», задающие поля или свойства, называются 
именованными
(named 
parameters); они являются необязательными. Чуть позже мы рассмотрим, как ини-
циировать конструирование экземпляра класса 
DllImportAttribute
.
Следует заметить, что к одному элементу можно применить несколько атри-
бутов. Скажем, в приведенном в начале главы фрагменте кода к параметру 
ver
метода 
GetVersionEx
применяются атрибуты 
In
и 
Out
. Учтите, что порядок следо-
вания атрибутов в такой ситуации не имеет значения. В C# отдельные атрибуты 
могут заключаться в квадратные скобки; также возможно перечисление наборов 


468
Download 6,27 Mb.

Do'stlaringiz bilan baham:
1   ...   334   335   336   337   338   339   340   341   ...   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