Прототип-класслар (generics) — булар параметр сифатида маълумот типларини қабул қилувчи класслардир. Улардан одатда маълумотларни сақлашда классларнинг контейнерлари ёки коллекциялар сифатида фойдаланиш мумкин. NET кутубхонасининг 2-версиясидан бошлаб асосий маълумот структураларини ифодалаш учун дастурлар ёрдамида стек, навбат, рўйхат, луҳат ва бошқаларни яратишда қўлланиладиган параметрлаштирилган коллекциялар жорий қилинган. Бу коллекциялар System.Collections.Generic холатлар фазосида жойлашган бўлиб, System.Collections холатлар фазосидаги коллекцияларни нусхаларини яратади. 24.4-жадвалда .NET кутубхонасининг оддий ва параметрлаштирилган коллекциялари ўртасидаги мослик баён этилган бўлиб, коллекцияларда сақланаётган маълумот типларини кўрсатувчи параметрлар бурчакли қавслар ичида кўрсатилган..
Намуна тариқасида ArrayList классининг универсал нусхаси (двойниги) List ни амалда қўллашни кўрайлик. Ундан бизга яхши маълум бўлган Monster хамда Daemon класслари объектлари коллекцияларини, шунингдек бутун сонларни ҳам сақлаш учун фойдаланамиз.
24.7-листинг. универсал List коллекциясидан фойдаланиш using System; using System.Collections.Generic; using System.Text;
namespace ConsoleApplication1 { using MonsterLib; // Monster ва Daemon класслари сақланаётган кутубхона class Program { static void Main() { List stado = new List(); stado.Add( new Monster( "Monia" ) ); stado.Add( new Monster( "Monk" ) ); stado.Add( new Daemon ( "Dimon", 3 ) ); foreach ( Monster x in stado ) x.Passport(); List lint = new List(); lint.Add( 5 ); lint.Add( 1 ); lint.Add( 3 ); lint.Sort(); int a = lint[2]; Console.WriteLine( a ); foreach ( int x in lint ) Console.Write( x + " "); }}} Бу дастур қуйидаги натижани беради:
Monster Monia health = 100 ammo = 100
Monster Monk health = 100 ammo = 100
Daemon Dimon health = 100 ammo = 100 brain = 3
5
1 3 5
24.7-листингда иккита коллекциялар келтирилган. Уларнинг биринчиси MonsterLib.dll кутубхонасидаги (stado) фойдаланувчи класслари элементларидан ташкил топган. Monster элементлар типи учун эълон қилинган коллекцияда полиморфизм принципига кўра иҳтиёрий ҳосила класс элементларини сақлаш мумкин, аммо бошқа типдаги элеменртларни сақлаб бўлмайди. Бундай чекловнинг афзаллиги шундаки, компилятор типларни назорат қилиши мумкин ва бу билан дастурнинг ишончлилик даражаси ортади, хатоликларни топиш осонлашади.
Бутун сонлардан иборат lint коллекциясида маълумотларни ихчамлаш ва аслига қайтариш учун амаллар ҳам, маълумотларни бир типдан икинчисига ошкор холда ўтказиш ҳам талаб қилинимайди.
Класс-прототипларни қариндош ёки шаблонли деб аталиши мумкин, чунки улар ўзи билан намуналарни мужассамлаштиради ва бу намуналар бўйича дастурнинг бажарилиши жаарёнида конкрет класслар қурилади.