Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
конспект_укр.docx
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
1 Мб
Скачать
☆

5. Використання шаблонів форм із депозитарію

Для вставлення шаблона форми в новий проект вам треба буде виконати команду File - New - Other і в діалоговому вікні New Items відшукати вашу форму:

 

У нижній частині вікна New Items розташовано три перемикачі, які визначають, як саме ви прагнете запозичити форму з Депозитарію: Copy - копіювати, Inherit - успадковувати, Use - використовувати. Якщо вибрано перемикач Copy, то файли форми просто будуть скопійовані у ваш додаток. При цьому ніякого подальшого зв'язку між вихідною формою й копією не буде. Ви можете спокійно змінювати властивості вашої копії, і це ніяк не відіб'ється на формі, що зберігається в Депозитарії. А якщо ви щось зміните у формі, що зберігається в Депозитарії, то ці зміни ніяк не торкнуться вашого додатка, куди ви до цього скопіювали форму.

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

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

 

Видалення шаблонів форм із Депозитарію

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

 

 

У лівій панелі вікна ви можете вибрати одну з закладок і в правій панелі побачити її склад. Ви можете додати (Add Page), вилучити (Delete Page), перейменувати (Rename Page) закладки Депозитарію, поміняти їхню послідовність за допомогою кнопок зі стрілками, виділити один з об'єктів, що зберігаються, і вилучити його (Delete Object), відредагувати (Edit Object) інформацію про об'єкт. Ви можете також виділити в правій панелі одну з форм і включити прапорець Main Form (головна форма). Тоді при відкритті нового проекту буде з'являтися не звичайна порожня форма, а саме ця позначена в Депозитарії. Якщо для однієї з форм включити прапорець New Form (нова форма), то саме ця форма, а не порожня, буде включатися в проект при виконанні команди File - New - Form.

  1. Шаблони класів на мові програмування с#.

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

• Які типи перетворювати в параметри.

Як правило, чим більше типів перетворено в параметри, тим більш гнучким стає програмний код. Однак, зайве узагальнення може зробити код складним для розуміння іншим розробникам.

• Які обмеження застосовуються до параметрів типів

• Рекомендується застосовувати найбільше можливе число обмежень, при якому забезпечується обробка потрібних типів. Наприклад, якщо відомо, що універсальних клас потрібен тільки для посилальних типів, можна застосувати обмеження класу. Це запобіжить використання класу з типами значень і дозволить використовувати оператор as для T і перевіряти нульові значення.

• Чи слід розділяти поведінку універсального класу на базові класи і підкласи.

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

• Чи слід реалізовувати один або кілька універсальних інтерфейсів.

Наприклад, при створенні класу, який буде використаний для створення елементів в універсальній колекції, може знадобитися реалізувати інтерфейс, подібний IComparable <T>, де T - тип вашого класу.

У правилах, що діють для параметрів типів і обмежень, діє кілька неявних принципів поведінки універсальних класів, особливо щодо успадкування та доступу до членів. Перед тим, як продовжити, слід усвідомити деякі моменти. Для універсального класу Node <T>, клієнтський код може посилатися на клас шляхом зазначення аргументу типу, щоб створити закритий тип (Node <int>). Також можна не вказувати параметр типу, щоб створити відкритий тип (Node <T>). Універсальні класи можуть бути успадковані від конкретних закритих або відкритих базових класів.

C#

class BaseNode { }

class BaseNodeGeneric<T> { }

// concrete type

class NodeConcrete<T> : BaseNode { }

//closed constructed type

class NodeClosed<T> : BaseNodeGeneric<int> { }

//open constructed type

class NodeOpen<T> : BaseNodeGeneric<T> { }

Класи, які не є універсальними, тобто конкретні класи, можуть бути успадковані від закритих базових класів, але не від відкритих базових класів і від параметрів типів, оскільки під час виконання клієнтський код не може надати аргумент типу, необхідний для створення екземпляра базового класу.

C#

//No error

class Node1 : BaseNodeGeneric<int> { }

//Generates an error

//class Node2 : BaseNodeGeneric<T> {}

//Generates an error

//class Node3 : T {}

Універсальні класи, успадковані від відкритих базових класів, повинні надавати аргументи типу для всіх параметрів типу базового класу, до яких немає доступу у посяде класу, як показано в наступному прикладі коду.

C#

class BaseNodeMultiple<T, U> { }

//No error

class Node4<T> : BaseNodeMultiple<T, int> { }

//No error

class Node5<T, U> : BaseNodeMultiple<T, U> { }

//Generates an error

//class Node6<T> : BaseNodeMultiple<T, U> {}

Універсальні класи, успадковані від відкритих базових класів, повинні вказувати обмеження, які відповідають обмеженням базового типу або є більш строгими.C#

class NodeItem<T> where T : System.IComparable<T>, new() { }

class SpecialNodeItem<T> : NodeItem<T> where T : System.IComparable<T>, new() { }

Універсальні типи можуть використовувати декілька параметрів типу і обмежень.C#

class SuperKeyType<K, V, U>

where U : System.IComparable<U>

where V : new()

{ }

Відкриті та закриті типи можна використовувати в якості параметрів методів.C#

void Swap<T>(List<T> list1, List<T> list2)

{

//code to swap items

}

void Swap(List<int> list1, List<int> list2)

{

//code to swap items

}

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

Універсальні класи інваріантні. Іншими словами, якщо вхідний параметр вказує List <BaseClass>, при спробі надати List <DerivedClass> виникне помилка компіляції.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]