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



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


Глава.18 .Настраиваемые.атрибуты
public Boolean Inherited {
get { return m_inherited; }
set { m_inherited = value; }
}
public AttributeTargets ValidOn {
get { return m_attributeTarget; }
}
}
Как видите, класс 
AttributeUsageAttribute
имеет открытый конструктор, 
который позволяет передавать битовые флаги, обозначающие область применения 
атрибута. Перечислимый тип 
System.AttributeTargets
определяется в FCL так:
[Flags, S
erializable]
public enum AttributeTargets {
Assembly = 0x0001,
Module = 0x0002,
Class = 0x0004,
Struct = 0x0008,
Enum = 0x0010,
Constructor = 0x0020,
Method = 0x0040,
Property = 0x0080,
Field = 0x0100,
Event = 0x0200,
Interface = 0x0400,
Parameter = 0x0800,
Delegate = 0x1000,
ReturnValue = 0x2000,
GenericParameter = 0x4000,
All = Assembly | Module | Class | Struct | Enum |
Constructor | Method | Property | Field | Event |
Interface | Parameter | Delegate | ReturnValue |
GenericParameter
}
У класса 
AttributeUsageAttribute
есть два дополнительных открытых свой-
ства, которым при применении атрибута к классу могут быть присвоены значения 
AllowMultiple
и 
Inherited
.
Большинство атрибутов не имеет смысла применять к одному элементу более 
одного раза. Например, вам ничего не даст последовательное применение атрибута 
Flags
или 
Serializable
:
[Flags][Flags]
internal enum Color {
Red
}
Более того, при попытке компиляции такого кода появится сообщение об ошибке 
(ошибка CS0579: дублирование атрибута 
Flags
):
error CS0579: Duplicate 'Flags' attribute


471
Конструктор.атрибута.и.типы.данных.полей.и.свойств
Однако есть и атрибуты, многократное применение которых оправдано — в FCL 
это класс атрибутов 
ConditionalAttribute
. Для этого параметру 
AllowMultiple
должно быть присвоено значение 
true
. В противном случае многократное при-
менение атрибута невозможно.
Свойство 
Inherited
класса 
AttributeUsageAttribute
указывает, будет ли 
атрибут, применяемый к базовому классу, применяться также к производным 
классам и переопределенным методам. Суть наследования атрибута демонстрирует 
следующий код:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, 
Inherited=true)]
internal class TastyAttribute : Attribute {
}
[Tasty][Serializable]
internal class BaseType {
[Tasty] protected virtual void DoSomething() { }
}
internal class DerivedType : BaseType {
protected override void DoSomething() { }
}
В этом коде класс 
DerivedType
и его метод 
DoSomething
снабжены атрибутом 
Tasty
, так как класс 
TastyAttribute
помечен как наследуемый. При этом класс 
DerivedType
несериализуемый, потому что класс 
SerializableAttribute
в FCL 
помечен как ненаследуемый атрибут.
Следует помнить, что в .NET Framework наследование атрибутов допустимо 
только для классов, методов, свойств, событий, полей, возвращаемых значений 
и параметров. Не забывайте об этом, присваивая параметру 
Inherited
значение 
true
. Кстати, при наличии наследуемых атрибутов дополнительные метаданные 
в управляемый модуль для производных типов не добавляются. Более подробно 
мы поговорим об этом чуть позже.

Download 6,27 Mb.

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