C# dasturlash tilida Anonymous Type (Nomlanmagan tur) — bu shunday ma'lumot turi bo‘lib, uni yaratishda ma'lumotning aniq nomini berish shart emas. Bu tur juda sodda obyektlarni tezkor yaratishda qo‘l keladi, masalan, bir nechta qiymatlar bilan ishlaganda. Anonymous turdan foydalanilganda, Visual Studio kompilatori avtomatik ravishda turini aniqlaydi va obyektni yaratadi.
Anonymous turdan foydalanishning asosiy afzalligi — agar obyekt faqat vaqtinchalik ma'lumotlarni saqlash uchun kerak bo‘lsa va uni turini aniqlash ortiqcha bo‘lsa, shunda foydali bo‘ladi.
Anonymous Type yaratish
Anonymous Type ni yaratish uchun new
operatoridan foydalaniladi va qiymat berish jarayonida tur avtomatik aniqlanadi. Quyidagi misolga e’tibor bering:
var student = new { Name = "Ali", Age = 21 };
Console.WriteLine($"Ismi: {student.Name}, Yoshi: {student.Age}");
Bu yerda student
obyektining turi anonymous bo‘lib, u Name
va Age
nomli xususiyatlarga ega. var
kalit so‘zi yordamida ma'lumot turi avtomatik aniqlanadi.
Muhim jihatlari:
- Anonymous Type immutable (o‘zgarmas) hisoblanadi, ya'ni uni yaratgandan keyin uning xususiyatlarini o‘zgartirib bo‘lmaydi.
Misol:
var car = new { Model = "BMW", Year = 2022 };
// car.Model = "Audi"; // Bu yerda xato bo'ladi, chunki anonymous type o'zgartirib bo'lmaydi.
- Anonymous Type faqat lokal darajada qo‘llaniladi, ya'ni u faqat bitta metod yoki blok ichida ishlatiladi. Uni metoddan tashqariga chiqarib bo‘lmaydi.
Qo‘shimcha misol:
Quyidagi misolda turli xil qiymatlar bilan bir nechta anonymous tur yaratiladi:
var product = new { Name = "Laptop", Price = 1500.50 };
var customer = new { FirstName = "Javlon", LastName = "Sobirov", Age = 30 };
Console.WriteLine($"Mahsulot: {product.Name}, Narxi: ${product.Price}");
Console.WriteLine($"Mijoz: {customer.FirstName} {customer.LastName}, Yoshi: {customer.Age}");
Natijada, ikki xil anonymous obyekt yaratildi: product
va customer
. Har biri o‘ziga xos xususiyatlarga ega.
Anonymous Type va LINQ
Anonymous turlar asosan LINQ bilan juda ko‘p ishlatiladi, chunki LINQda tezkor ravishda ma'lumotlarni filtrlash yoki guruhlash jarayonida ma'lumotlarni qayta ishlashda tur aniqlash talab etilmaydi.
Misol:
var students = new[]
{
new { Name = "Ali", Age = 21 },
new { Name = "Zafar", Age = 19 },
new { Name = "Nodir", Age = 22 }
};
var youngStudents = from student in students
where student.Age < 22
select new { student.Name, student.Age };
foreach (var student in youngStudents)
{
Console.WriteLine($"Ismi: {student.Name}, Yoshi: {student.Age}");
}
Bu misolda, youngStudents
anonymous turdagi kolleksiya bo‘lib, unda faqat yoshi 22 dan kichik bo‘lgan talabalar tanlab olinadi.
Xulosa:
- Anonymous Type — shaxsiy obyektlar yaratishda oson va qulay.
- U o‘zgaruvchan emas, ya'ni obyekt xususiyatlarini o‘zgartirib bo‘lmaydi.
- Faoliyat ko‘rsatuvchi hududda (scope) ishlatiladi va tashqariga chiqmaydi.
- Asosan, LINQ kabi joylarda foydalanish uchun juda qulay.
1. Anonymous Type ning foydasi:
Anonymous Type asosan ma'lum bir vaziyatlarda ishlatiladi:
- Ma'lumotlarni vaqtincha saqlash kerak bo‘lganda.
- Mavjud tiplarni yaratishga hojat bo‘lmagan holatlarda.
- LINQ yoki querylarda tezkor, bir martalik ishlov berish uchun.
2. Anonymous Type bilan massivlar
Anonymous Type lar massivlarda ishlatilishi ham mumkin. Masalan, bir nechta obyektlarni vaqtincha saqlash uchun massiv yaratamiz:
var books = new[]
{
new { Title = "C# Fundamentals", Author = "John Doe", Pages = 450 },
new { Title = "Mastering LINQ", Author = "Jane Doe", Pages = 320 },
new { Title = "ASP.NET Core", Author = "Mark Smith", Pages = 290 }
};
foreach (var book in books)
{
Console.WriteLine($"Kitob: {book.Title}, Muallifi: {book.Author}, Sahifalar soni: {book.Pages}");
}
Bu yerda anonymous tipdagi obyektlar books
nomli massivda saqlanmoqda. Har bir kitob haqida ma'lumot massiv orqali chop qilinmoqda.
3. Anonymous Type ning cheklovlari
Anonymous Type o‘zining qulayliklari bilan birga ba'zi cheklovlarga ham ega. Ushbu turlar faqat o‘qish (read-only) bo‘lgan xususiyatlarni saqlaydi, ya'ni bir marta yaratilganidan keyin obyektning xususiyatlarini o‘zgartirib bo‘lmaydi.
Misol:
var movie = new { Name = "Inception", Rating = 9.0 };
// movie.Rating = 8.5; // Xato bo‘ladi: Anonymous tipdagi xususiyat o‘zgartirib bo‘lmaydi.
Console.WriteLine($"Film nomi: {movie.Name}, Reyting: {movie.Rating}");
Bu yerda Rating
ni o‘zgartirishga urinish xatoga olib keladi, chunki anonymous tipdagi obyektlar o‘zgarmas (immutable) hisoblanadi.
4. Anonymous Type ichida Anonymous Type
C# da anonymous tiplar boshqa anonymous tiplarni o‘z ichiga olishi mumkin. Bu murakkab ma'lumot strukturalarini yaratishda ishlatiladi.
Misol:
var employee = new
{
Name = "Ali",
Position = new { Title = "Dasturchi", Level = 3 },
Salary = 2500
};
Console.WriteLine($"Ism: {employee.Name}, Lavozim: {employee.Position.Title}, Daraja: {employee.Position.Level}, Oylik: ${employee.Salary}");
Bu yerda employee
nomli anonymous tip o‘z ichida yana bir anonymous tip (Position
) ni saqlamoqda.
5. LINQ bilan yanada keng foydalanish
Anonymous turlar ko‘pincha LINQ (Language Integrated Query) operatsiyalarida keng foydalaniladi, chunki LINQ orqali ma'lumotlar bilan ishlashda anonymous turlar tezkor va oddiy yechim beradi.
Masalan, katta kolleksiyadan faqat kerakli ma'lumotlarni ajratib olish:
var students = new[]
{
new { Name = "Ali", Age = 21, Major = "Matematika" },
new { Name = "Zafar", Age = 22, Major = "Fizika" },
new { Name = "Nodir", Age = 19, Major = "Informatika" }
};
var filteredStudents = from student in students
where student.Age > 20
select new { student.Name, student.Major };
foreach (var student in filteredStudents)
{
Console.WriteLine($"Ism: {student.Name}, Yo‘nalishi: {student.Major}");
}
Bu misolda faqat yoshi 20 dan katta bo‘lgan talabalar ajratib olinadi va anonymous tip orqali faqat kerakli ma'lumotlar tanlanadi.
6. Anonymous Type ning foydalanuvchi definitsiyalari bilan taqqoslanishi
Anonymous tiplar odatda vaqtincha ma'lumotlarni ishlatish uchun kerak bo‘lsa ham, ko‘p hollarda foydalanuvchi definitsiya qilgan klasslarga ehtiyoj seziladi. Anonymous tiplar cheklangan xususiyatlar va o‘zgaruvchanlikka ega bo‘lmaganligi sababli, murakkab strukturalar uchun oddiy klasslardan foydalanish yaxshiroqdir.
Misol: Quyidagi holatda anonymous tip foydali bo‘lmasligi mumkin, chunki ma'lumotlar bilan keyinroq ishlash yoki ularni o‘zgartirish talab qilinishi mumkin:
class Car
{
public string Model { get; set; }
public int Year { get; set; }
public double Price { get; set; }
}
var car = new Car { Model = "Tesla", Year = 2023, Price = 50000 };
car.Price = 48000; // Bu yerda o'zgartirish mumkin
Console.WriteLine($"Model: {car.Model}, Yil: {car.Year}, Narx: {car.Price}");
Bu holatda Car
klassi anonymous tipga qaraganda ko‘proq imkoniyatlarga ega, chunki obyektning qiymatlarini keyinchalik o‘zgartirish mumkin.
Xulosa:
- Anonymous Type juda qulay vosita bo‘lib, kichik va vaqtinchalik obyektlarni yaratishda ishlatiladi.
- Anonymous Type immutable hisoblanadi, ya'ni bir marta yaratib bo‘lgandan keyin uning qiymatlarini o‘zgartirib bo‘lmaydi.
- Asosan, LINQ operatsiyalari va querylar bilan ishlaganda qo‘l keladi.
- Anonymous turlar murakkab va katta strukturalar uchun emas, faqat vaqtinchalik ma'lumotlarni saqlash uchun mo‘ljallangan.
Top comments (0)