Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Атрибути




 

Атрибути - це додаткові відомості про елементи програми (класів, методів, параметрів і т. д.). За допомогою атрибутів можна додавати інформацію в метаданні збірки і потім витягувати її під час виконання програми. Атрибут є спеціальним видом класу і походить від базового класу System. Attribute.

Атрибути діляться на стандартні і призначених для користувача. У бібліотеці.NET передбачена множина стандартних атрибутів, які можна використовувати в програмах. Якщо всієї різноманітності стандартних атрибутів не вистачить, щоб задовольнити вимоги програміста, він може описати власні класи атрибутів, після чого застосовувати їх точно так, як і стандартні.

При використанні (специфікації) атрибутів вони задаються в секції атрибутів, що розташовується безпосередньо перед елементом, для опису якого вони призначені. Секція береться в квадратні дужки і може містити декілька атрибутів, що перераховуються через кому. Порядок проходження атрибутів довільний.

Для кожного атрибуту задаються ім'я, а також необов'язкові параметри і тип елементу збірки, до якого відноситься атрибут. Простий приклад атрибуту:

[Serializable]

class Monster{

[NonSerialized]

string name;

int health, ammo;}

 

Атрибут [ Serializable ] означає, що об'єкти цього класу можна зберігати в зовнішній пам'яті, відноситься до всього класу Monster. При цьому поле name помічене атрибутом [ Nonserialized ] говорить про те, що це поле зберігатися не повинно.

Зазвичай з контексту зрозуміло, до якого елементу збірки відноситься атрибут, проте в деяких випадках можуть виникнути неоднозначності. Для їх усунення перед ім'ям атрибуту записується тип елементу збірки - уточнююче ключове слово, відокремлюване від атрибуту двокрапкою. Ключові слова і відповідні елементи збірки, до яких можуть відноситися атрибути наведені в таблиці 12.3.

 

Таблиця 12.3

Типи елементу збірки, що задаються для атрибутів

Ключове слово Опис
assembly Атрибут відноситься до всієї збірки
field Атрибут відноситься до поля
event Атрибут відноситься до події
method Атрибут відноситься до методу
param Атрибут відноситься до параметрів методу
property Атрибут відноситься до властивості
return Атрибут відноситься до повертає мого значення
type Атрибут відноситься до класу або структури

Нехай, наприклад, перед методом описаний гіпотетичний атрибут ABC:

 

[ABC]

public void Do() {... }

 

За умовчанням він відноситься до методу. Щоб вказати, що атрибут відноситься не до методу, а до його поверємого значення, слід написати:

 

[return:ABC]

public void Do() {... }

 

Атрибут може мати параметри. Вони записуються в круглих дужках через кому після імені атрибуту і бувають позиційними і іменованими. Іменований параметр указується у формі ім'я = значення, для позиційного просто задається значення. Наприклад, для використаного в наступному фрагменті коди атрибуту ClsСompliant заданий позиційний параметр true. Атрибути, що відносяться до збірки, повинні розташовуватися безпосередньо після директив using, наприклад:

 

using System;

[assembly:CLSCompliant(true)]

namespace ConsoleApplicationl

{

...

 

}

 

Атрибут [ CLSCompliant ] визначає, задовольняє програмний код угодам CLS (Common Language Specification) чи ні. Стандартні атрибути, як і інші типи класів, мають набір конструкторів, які визначають, яким чином використовувати (специфікувати) атрибут. Фактично, при використанні атрибуту указується найбільш відповідний конструктор, а величини, невказані в конструкторі, задаються через іменовані параметри в кінці списку параметрів.

Стандартний атрибут [ Stathread ], старанно видалений зі всіх лістингів в цій книзі, відноситься до методу, перед яким він записаний. Він має значення тільки для додатків, що використовують модель СОМ, і задає модель потоків в рамках моделі СОМ. Приклад застосування ще одного стандартного атрибуту, [ Conditional ], приведений далі в розділі “Директиви препроцесора”.

Атрибути рівня збірки зберігаються у файлі AssemblyInfo.cs, автоматично створюваному середовищем для будь-якого проекту. Для явного завдання номера версії збірки можна записати атрибут [ AssemblyVersion ], наприклад:

 

[assembly: AssemblyVersion("1.0.0.0")]

 

 

12.5. Простір імен

Простір імен - це контейнер для типів, що визначає зону їх видимості. Просторам імен запобігають конфлікти імен і використовуються для двох взаємозв'язаних цілей:

– логічного групування елементів програми, розташованих в різних фізичних файлах;

– групування імен, що надаються збіркою в користування іншим модулям.

У всіх програмах, створених раніше, використовувався простір імен, що створюється за умовчанням. Реальні програми найчастіше розробляються групою програмістів, кожен з яких працює зі своїм набором фізичних файлів (одиниць компіляції), що зберігають елементи створюваного застосування. Якщо в різних файлах описати простори імен з одним і тим же ім'ям, то при побудові додатку, що складається з цих файлів, буде зкомпоновано єдиний простір імен.

 

Простори імен можуть бути вкладеними, наприклад:

namespace State

{

namespace City

{

...

}

}

Таке оголошення аналогічно наступному:

namespace State.City

{

}

Вкладені простори імен, як ви напевно встигли відмітити, широко застосовуються в бібліотеці.NET.

Існує три способи використання типу, визначеного в якому-небудь просторі імен:

1. Використовувати повністю кваліфіковане ім'я. Наприклад, в просторі імен System.Runtime.Serialization.Formatters.Binary описаний клас BinaryFormatter.

Створення об'єкту цього класу за допомогою кваліфікованого імені виглядає так:

System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf =

new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();

 

2. Використовувати директиву using, за допомогою якої імпортуються всі імена із заданого простору. В цьому випадку попередній приклад прийме вигляд

using System.Runtime.Serialization.Formatters.Binary;

BinaryFormatter bf = new BinaryFormatter();

 

Директива using повинна розташовуватися зовні або усередині простору імен, проте до любих описів типів.

3. Використовувати псевдонім типу. Це робиться за допомогою другої форми директиви using:

using BinF =

System.Runtime.Serialization.Formatters.Binary.BinaryFormatter;

BinF bf = new BinF();

 

Перший спосіб застосовується при одноразовому використанні імені типу “неглибоко” вкладених просторів імен, другий - в більшості решти випадків, що ми і робили у всіх прикладах, а третій можна рекомендувати при багаторазовому використанні довгого імені типу.

Має місце можливість застосовувати псевдонім простору імен за допомогою операції::, наприклад:

 

using SI0 = System.I0 // псевдонім простору імен

using MIO = MyLibrary.IO; // псевдонім простору імен

class Program

{

static void Main()

{

// використання псевдонімів

SI0:: Stream s = new MIO:: Empty Stream();

}

}

 

Використання псевдоніма для простору імен гарантує, що подальші підключення інших просторів імен до цієї збірки не вплинуть на існуючі визначення. Зліва від операції :: можна вказати ідентифікатор global. Він гарантує, що пошук ідентифікатора, розташованого праворуч операції, виконуватиметься тільки в глобальному просторі імен. Мета користування цього ідентифікатора та ж: не допустити змін існуючих визначень при розробці наступних версій програми, в яких в неї бути додані нові простори імен, що містять елементи з такими іменами.

Таким чином, збірки забезпечують фізичне групування типів, а простори імен - логічне. В світі мережевого програмування, коли програмістові доступні десятки тисяч класів, простори імен абсолютно необхідні як для класифікації і пошуку, так і для запобігання конфліктам імен типів.

 




Поделиться с друзьями:


Дата добавления: 2014-12-27; Просмотров: 642; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.025 сек.