1. Какво е общо?
Генеричните синтаксиси са нов синтаксис, въведен в C# 2.0, не синтактичен захар, а функции, предоставени от ъпгрейди на фреймуърка в 2.0.
Когато програмираме програми, често срещаме модули с много сходни функции, но те обработват различни данни. Но нямаме друг избор освен да пишем няколко метода поотделно, за да обработваме различни типове данни. В момента въпросът е: има ли начин да се използва един и същ метод за справяне с различни видове параметри? Появата на генеричните лекарства е специално създадена да реши този проблем.
2. Защо да използвате генерични лекарства
Нека разгледаме следния пример:
Резултат:
От горните резултати виждаме, че тези три метода имат едни и същи функции, с изключение на различните параметри, които преминават. По времето на версия 1.0 нямаше концепция за генерики, така че какво да се прави. Вярвам, че много хора ще мислят за наследяването на една от трите основни характеристики на ООП – знаем, че в C# обектът е базовият клас на всички типове, а горният код е оптимизиран по следния начин:
Резултат:
От горните резултати виждаме, че използването на тип обект отговаря на нашите изисквания и решава повторната използваемост на кода. Някои хора може да попитат защо е възможно да се подава int, string и т.н., когато е дефинирано като тип обект? Има две причини:
1. Типът обект е родителският клас на всички типове.
2. Чрез наследяване подкласовете притежават всички атрибути и поведения на родителския клас, и където и да се появи родителският клас, той може да бъде заменен с подкласове.
Но горният метод с тип обект носи друг проблем: "boxing" и "unboxing" могат да намалят производителността на програмата.
Microsoft въведе генерични системи в C# 2.0, които могат много добре да решат горните проблеми.
3. Общи типови параметри
В обобщена дефиниция на тип или метод, параметърът на типа е заместител, зададен от клиента за конкретен тип, когато инстанцира променлива от този общ тип. Генеричният клас (<T>GenericList) не може да се използва както е, защото не е истински тип; По-скоро е като чертеж за типове. За да използва <T>GenericList, клиентският код трябва да декларира и инстанцира тип конструкция, като задава параметъра на типа в ъглови скоби. Аргументът тип за този конкретен клас може да бъде всеки тип, който компилаторът разпознава. Можете да създадете произволен брой екземпляри на тип конструкция, всяка с различен тип параметър.
Кодът в горния пример може да бъде модифициран по следния начин:
Обаждане:
Покажи резултати:
|