Вече знаем, че атрибутите са инстанции на някакъв клас, наследник на System.Attribute. Те се съхраняват като метаданни в асемблито и могат да бъдат извличани по време на изпълнение на програмата. Сега ще разгледаме как точно се съхраняват.
Какво се случва по време на компилация?
По време на компилация приложените към дадена цел атрибути се обработват по следния начин:
-
Компилаторът намира типа, който съответства на приложения атрибут. В нашия пример с добавянето на коментари към кода на атрибута Comment съответства класа CommentAttribute.
-
Компилаторът създава инстанция на приложения атрибут. В нашия пример се инстанцира класът CommentAttribute (който е дефиниран в нашия сорс код и е компилиран преди това).
-
Компилаторът инициализира полетата на приложения атрибут чрез параметрите, подадени в конструктора му и чрез установяване на свойствата, за които е зададена стойност. В нашия случай полето mCommentText се инициализира от конструктора на CommentAttribute с подадената за него стойност.
-
Инстанцията на атрибута, която е получена, се сериализира (представя се като последователност от байтове).
-
Сериализираната инстанция се записва в таблицата с метаданните за целта, към която е приложена.
Какво се случва при извличане на атрибут?
По време на изпълнение, когато са необходими, атрибутите се десериализират от метаданните на асемблито и се предоставят на приложението. За тях се създават най-обикновени обекти от съответните им класове и състоянието им се извлича от метаданните.
Повече за сериализацията и десериализацията ще научим в темата за сериализация в .NET Framework, но за момента можем да считаме, че чрез тези техники можем да запазваме обекти от паметта във файл или друг носител и да ги възстановяваме след време обратно в паметта.
Упражнения -
Обяснете какво представляват атрибутите в .NET Framework. Как се прилагат атрибути? Как се прилагат атрибути с параметри? Как се задава цел при прилагане на атрибут?
-
Дефинирайте собствен атрибутен тип VersionAttribute, който може да се прилага само към типове или методи и служи за задаване на версията на даден тип или метод. Версията трябва да се състои от символен низ за самата версия и незадължителен текстов коментар. Дефинирайте подходящи конструктори и свойства за класа.
-
Създайте клас VersionsDemo с няколко метода и им приложете атрибута VersionAttribute с някакви примерни версии, на места придружени от коментари.
-
Създайте малка програма, която зарежда класа VersionsDemo и отпечатва неговата версия, както и версията на всеки негов метод заедно с текстовия коментар към нея (ако има такъв). За целта използвайте методите GetMethods() и GetCustomAttributes() на класа System.Type.
Използвана литература -
Светлин Наков, Атрибути – http://www.nakov.com/dotnet/lectures/ Lecture-6-Attributes-v1.0.ppt
-
Jeffrey Richter, Applied Microsoft .NET Framework Programming, Microsoft Press, 2002, ISBN 0735614229
-
MSDN Training, Programming with the Microsoft® .NET Framework (MOC 2349B), Module 17: Attributes
-
MSDN Library – http://msdn.microsoft.com
|
Национална академия по разработка на софтуер
|
Лекторите
» Светлин Наков е автор на десетки технически публикации и няколко книги, свързани с разработката на софтуер, заради което е търсен лектор и консултант.
Той е разработчик с дългогодишен опит, работил по разнообразни проекти, реализирани с различни технологии (.NET, Java, Oracle, PKI и др.) и преподавател по съвременни софтуерни технологии в СУ "Св. Климент Охридски".
През 2004 г. е носител на наградата "Джон Атанасов" на президента на България Георги Първанов.
Светлин Наков ръководи обучението по Java технологии в Академията.
» Мартин Кулов е софтуерен инженер и консултант с дългогодишен опит в изграждането на решения с платформите на Microsoft.
Мартин е опитен инструктор и сертифициран от Майкрософт разработчик по програмите MCSD, MCSD.NET, MCPD и MVP и международен лектор в световната организация на .NET потребителските групи INETA.
Мартин Кулов ръководи обучението по .NET технологии в Академията.
|
Академията
» Национална академия по разработка на софтуер (НАРС) е център за професионално обучение на софтуерни специалисти.
» НАРС провежда БЕЗПЛАТНО курсове по разработка на софтуер и съвременни софтуерни технологии в София и други градове.
» Предлагани специалности:
-
Въведение в програмирането (с езиците C# и Java)
-
Core .NET Developer
-
Core Java Developer
» Качествено обучение с много практически проекти и индивидуално внимание за всеки.
» Гарантирана работа! Трудов договор при постъпване в Академията.
» БЕЗПЛАТНО!
Учите безплатно във въведителните курсове и по стипендии от работодателите в следващите нива.
|
http://academy.devbg.org
| Глава 8. Масиви и колекции Необходими знания -
Базови познания по структури от данни
-
Базови познания за общата система от типове в .NET (Common Type System)
-
Базови познания за езика C#
Сподели с приятели: |