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



Download 6,27 Mb.
Pdf ko'rish
bet344/658
Sana12.06.2023
Hajmi6,27 Mb.
#950840
1   ...   340   341   342   343   344   345   346   347   ...   658
Bog'liq
CLR via C Programmirovanie na platforme Microsoft NET Framework 4 5 na yazyke C

ПриМеЧание
Имейте.в.виду,.что.методы.отражения,.поддерживающие.логический.параметр.inherit,.
реализуют.только.классы.Attribute,.Type.и.MethodInfo .Все.прочие.методы.отражения.
этот.параметр.игнорируют.и.иерархию.наследования.не.проверяют .Для.проверки.
наличия.унаследованного.атрибута.в.событиях,.свойствах,.полях,.конструкторах.или.
параметрах.используйте.один.из.методов.класса.Attribute 
Есть еще один аспект, о котором следует помнить. После передачи класса ме-
тодам 
IsDefined

GetCustomAttribute
или 
GetCustomAttributes
они начинают 
искать этот класс атрибута или производные от него. Для поиска конкретного 
класса атрибута требуется дополнительная проверка возвращенного значения
которая гарантирует, что возвращен именно тот класс, который вам нужен. Чтобы 
избежать недоразумений и дополнительных проверок, можно определить класс 
с модификатором 
sealed
.
Вот пример рассмотрения методов внутри типа и отображения применяемых 
к каждому их методов атрибутов. Это демонстрационный код; обычно никто не 
применяет указанные настраиваемые атрибуты подобным образом:


476
Глава.18 .Настраиваемые.атрибуты
using System;
using System.Diagnostics;
using System.Reflection;
[assembly: CLSCompliant(true)]
[Serializable]
[DefaultMemberAttribute("Main")]
[DebuggerDisplayAttribute("Richter", Name = "Jeff", 
Target = typeof(Program))]
public sealed class Program {
[Conditional("Debug")]
[Conditional("Release")]
public void DoSomething() { }
public Program() {
}
[CLSCompliant(true)]
[STAThread]
public static void Main() {
// Вывод набора атрибутов, примененных к типу
ShowAttributes(typeof(Program));
// Получение и задание методов, связанных с типом
var members = 
from m in typeof(Program).GetTypeInfo().DeclaredMembers.OfType() 
where m.IsPublic 
select m;
foreach (MemberInfo member in members) {
// Вывод набора атрибутов, примененных к члену
ShowAttributes(member);
}
}
private static void ShowAttributes(MemberInfo attributeTarget) {
var attributes = attributeTarget.GetCustomAttributes();
Console.WriteLine("Attributes applied to {0}: {1}",
attributeTarget.Name, (attributes.Count() == 0 ? "None" : String.Empty));
foreach (Attribute attribute in attributes) {
// Вывод типа всех примененных атрибутов
Console.WriteLine(" {0}", attribute.GetType().ToString());
if (attribute is DefaultMemberAttribute)
Console.WriteLine(" MemberName={0}",
((DefaultMemberAttribute) attribute).MemberName);
if (attribute is ConditionalAttribute)


477
Сравнение.экземпляров.атрибута
Console.WriteLine(" ConditionString={0}",
((ConditionalAttribute) attribute).ConditionString);
if (attribute is CLSCompliantAttribute)
Console.WriteLine(" IsCompliant={0}",
((CLSCompliantAttribute) attribute).IsCompliant);
DebuggerDisplayAttribute dda = attribute as DebuggerDisplayAttribute;
if (dda != null) {
Console.WriteLine(" Value={0}, Name={1}, Target={2}",
dda.Value, dda.Name, dda.Target);
}
}
Console.WriteLine();
}
}
Скомпоновав и запустив это приложение, мы получим следующий результат:
Attributes applied to Program:
System.SerializableAttribute
System.Diagnostics.DebuggerDisplayAttribute
Value=Richter, Name=Jeff, Target=Program
System.Reflection.DefaultMemberAttribute
MemberName=Main
Attributes applied to DoSomething:
System.Diagnostics.ConditionalAttribute
ConditionString=Release
System.Diagnostics.ConditionalAttribute
ConditionString=Debug
Attributes applied to Main:
System.CLSCompliantAttribute
IsCompliant=True
System.STAThreadAttribute
Attributes applied to .ctor: None

Download 6,27 Mb.

Do'stlaringiz bilan baham:
1   ...   340   341   342   343   344   345   346   347   ...   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