КАТЕГОРИИ: Архитектура-(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 Типи елементу збірки, що задаються для атрибутів
Нехай, наприклад, перед методом описаний гіпотетичний атрибут 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; Просмотров: 665; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |