1. Що таке загальне?
Дженерики — це новий синтаксис, введений у C# 2.0, не синтаксис, а функції, які надають оновлення фреймворку у версії 2.0.
Коли ми програмуємо програми, ми часто стикаємося з модулями з дуже схожими функціями, але вони обробляють різні дані. Але у нас немає іншого вибору, окрім як писати кілька методів окремо для обробки різних типів даних. На даний момент питання в тому, чи існує спосіб використати один і той самий метод для роботи з різними типами параметрів? Поява дженериків спеціально спрямована на вирішення цієї проблеми.
2. Чому використовують дженерики
Розглянемо наступний приклад:
Результат:
З наведених вище результатів видно, що ці три методи мають однакові функції, за винятком різних параметрів, які вони передають. На момент виходу версії 1.0 не існувало поняття дженериків, тож що робити далі. Я вважаю, що багато хто подумає про спадкування однієї з трьох основних особливостей ООП: ми знаємо, що в C# об'єкт є базовим класом усіх типів, і наведений вище код оптимізований наступним чином:
Результат:
З наведених вище результатів видно, що використання типу Object відповідає нашим вимогам і вирішує питання повторного використання коду. Дехто може запитати, чому можна передати int, string тощо, якщо це визначено як тип об'єкта? Є дві причини:
1. Тип об'єкта — це батьківський клас усіх типів.
2. Через спадкування підкласи мають усі атрибути та поведінку батьківського класу, і де б не з'явився батьківський клас, його можна замінити підкласами.
Але наведений вище метод типу об'єктів породжує ще одну проблему: коробка та розпакування можуть знижувати продуктивність програми.
Microsoft представила генерики в C# 2.0, які дуже добре вирішують вищезазначені проблеми.
3. Універсальні типові параметри
У визначенні загального типу або методу параметр типу — це тимчасовий елемент, визначений клієнтом для конкретного типу при інстанції змінної цього типу. Загальний клас (<T>GenericList) не може використовуватися як є, оскільки він не є справжнім типом; Це скоріше креслення типів. Для використання <T>GenericList клієнтський код повинен оголосити та створити тип конструкції, вказуючи параметр типу в кутових дужках. Аргумент типу для цього конкретного класу може бути будь-яким типом, який розпізнає компілятор. Ви можете створити будь-яку кількість екземплярів типів конструктів, кожен із різними параметрами типу.
Код у наведеному вище прикладі можна змінити наступним чином:
Дзвінок:
Показати результати:
|