string tomId = (string)tom.Id; // ! Xato – InvalidCastException istisno holati. Console.WriteLine(tomId); // 546 Biz qaysi ob'ekt Id ni ifodalashini bilmasligimiz mumkin va bu holda raqam olishga urinayotganda InvalidCastExceptionga duch kelamiz. Bundan tashqari, dasturni bajarish bosqichida biz istisnoga duch kelamiz. Ushbu muammolarni hal qilish uchun C# ga umumiy turlarni qo'llab-quvvatlash (ko'pincha umumiy turlar deb ham ataladi) qo'shildi. Umumiy turlar foydalanish uchun ma'lum bir turni belgilash imkonini beradi. Shuning uchun, keling, Person sinfini umumiy sifatida aniqlaymiz: class Person { public T Id { get; set; } public string Name { get; set; } public Person(T id, string name){ Id = id; Name = name; } } class Person tavsifidagi burchakli qavslar sinf umumiy ekanligini bildiradi va burchakli qavslar ichiga olingan T turi bu sinf tomonidan qo'llaniladi. T harfini ishlatish shart emas, u boshqa har qanday harf yoki belgilar to'plami bo'lishi mumkin. Kodni yozish bosqichida, biz qanday turdagi bo'lishini bilmaymiz, u har qanday turdagi bo'lishi mumkin. Shuning uchun burchakli qavslardagi T parametri umumiy parametr deb ham ataladi, chunki uni har qanday turdagi almashtirish mumkin. Masalan, T parametri o'rniga int ob'ektidan, ya'ni foydalanuvchi raqamini ifodalovchi raqamdan foydalanish mumkin. Shuningdek, u string ob'ekti yoki boshqa sinf yoki struktura bo'lishi mumkin: Person tom = new Person(546, "Tom"); // jamlash shart emas Person bob = new Person("abc123", "Bob"); string bobId = bob.Id; // har qanday turdagi konvertatsiya kerak emas Console.WriteLine(tomId); // 546 Console.WriteLine(bobId); // abc123
Do'stlaringiz bilan baham: |