Collections و Generics در #C
در زبان #C، Collections (مجموعهها) و Generics ابزارهای بسیار مفیدی هستند که به شما کمک میکنند تا دادهها را به صورت مؤثرتر و قابل انعطافتر ذخیره و مدیریت کنید.
۱. Collections (مجموعهها) در #C
Collection به مجموعهای از اشیاء گفته میشود که میتوان آنها را در یک واحد مدیریت و پردازش کرد. در #C، مجموعهها شامل انواع مختلفی از دادهها هستند که میتوانند متغیرهایی از انواع مختلف را نگهداری کنند.
انواع Collections در #C:
- Array (آرایهها): سادهترین نوع مجموعه که در آن دادهها به صورت مرتب و با ایندکسهای عددی ذخیره میشوند.
- List: یک نوع مجموعه از کلاس System.Collections.Generic است که دادهها را به صورت داینامیک ذخیره میکند. شما میتوانید اندازه آن را تغییر دهید و دادهها را به راحتی مدیریت کنید.
- Dictionary<TKey, TValue>: یک نوع مجموعه کلید-مقدار است که به شما این امکان را میدهد تا دادهها را با استفاده از یک کلید خاص ذخیره و جستجو کنید.
- Queue: یک صف است که دادهها را به ترتیب FIFO (اول وارد، اول خارج) ذخیره میکند.
- Stack: یک پشته است که دادهها را به ترتیب LIFO (آخر وارد، اول خارج) ذخیره میکند.
- HashSet: مجموعهای از اشیاء بدون ترتیب خاص که نمیتواند دادههای تکراری را نگهدارد.
مثال استفاده از List
using System.Collections.Generic;
class Program
{
static void Main()
{
List<string> fruits = new List<string>();
// اضافه کردن عناصر به لیست
fruits.Add("Apple");
fruits.Add("Banana");
fruits.Add("Orange");
// دسترسی به عناصر لیست
Console.WriteLine(fruits[0]); // Apple
// پیمایش در لیست
foreach (var fruit in fruits)
{
Console.WriteLine(fruit);
}
}
}
خروجی:
Banana
Orange
مثال استفاده از Dictionary<TKey, TValue>
using System.Collections.Generic;
class Program
{
static void Main()
{
// ایجاد یک دیکشنری از نوع رشته به عدد صحیح
Dictionary<string, int> studentGrades = new Dictionary<string, int>();
// اضافه کردن کلید-مقدار به دیکشنری
studentGrades["Alice"] = 90;
studentGrades["Bob"] = 85;
studentGrades["Charlie"] = 95;
// دسترسی به مقادیر با استفاده از کلید
Console.WriteLine("Alice's grade: " + studentGrades["Alice"]);
Console.WriteLine("Bob's grade: " + studentGrades["Bob"]);
}
}
خروجی:
Bob's grade: 85
۲. Generics (جنریکها) در #C
Generics در #C به شما این امکان را میدهند که کلاسها، ساختارها، متدها و رابطها را طوری تعریف کنید که نوع دادههای آنها در زمان کامپایل (نه زمان اجرا) مشخص شود. این ویژگی به شما کمک میکند تا کدهای عمومیتری بنویسید که قابلیت استفاده مجدد و انعطافپذیری بالاتری دارند.
ویژگیهای Generics:
- نوعهای داده عمومی: با استفاده از جنریکها، شما میتوانید کدهایی بنویسید که برای انواع مختلف دادهها به کار بروند.
- امنیت نوع (Type Safety): با استفاده از جنریکها، #C به طور خودکار مطمئن میشود که نوعهای داده به درستی در مجموعهها و متدها استفاده میشوند.
- کارایی بهتر: چون جنریکها در زمان کامپایل نوع دادهها را تعیین میکنند، نیازی به تبدیل نوع (Casting) در زمان اجرا نیست که باعث افزایش عملکرد برنامه میشود.
مثال از استفاده از یک کلاس جنریک
class Box<T>
{
private T value;
public Box(T value)
{
this.value = value;
}
public T GetValue()
{
return value;
}
}
class Program
{
static void Main()
{
// ایجاد یک شی از کلاس Box با نوع داده int
Box<int> intBox = new Box<int>(123);
Console.WriteLine(intBox.GetValue()); // خروجی: 123
// ایجاد یک شی از کلاس Box با نوع داده string
Box<string> stringBox = new Box<string>("Hello, World!");
Console.WriteLine(stringBox.GetValue()); // خروجی: Hello, World!
}
}
خروجی:
Hello, World!
مثال استفاده از متدهای جنریک
class Program
{
// متد جنریک که دو عنصر را مقایسه میکند
static bool AreEqual<T>(T x, T y)
{
return x.Equals(y);
}
static void Main()
{
Console.WriteLine(AreEqual(10, 10)); // خروجی: True
Console.WriteLine(AreEqual("Hello", "World")); // خروجی: False
}
}
خروجی:
False
جنریکها در Collections
در #C، بسیاری از مجموعهها از جنریکها استفاده میکنند. به عنوان مثال، List، Dictionary<TKey, TValue>، Queue و دیگر مجموعهها به صورت جنریک هستند، به این معنا که میتوانید نوع دادهی مورد نظر خود را هنگام ایجاد آنها مشخص کنید.
مزایای استفاده از Generics:
- کاهش تبدیل نوع (Casting): با استفاده از جنریکها، نیازی به تبدیل نوع نیست.
- افزایش کارایی: به دلیل عدم استفاده از تبدیل نوع در زمان اجرا، عملکرد برنامه بهبود مییابد.
- کد قابل استفاده مجدد: با جنریکها، شما میتوانید کدهایی بنویسید که برای انواع مختلف دادهها کار میکنند.
جمعبندی
- Collections مجموعههایی از دادهها هستند که در #C انواع مختلفی دارند، مانند آرایهها، لیستها، دیکشنریها، صفها و پشتهها. هر یک از این مجموعهها کاربردهای خاص خود را دارند.
- Generics به شما این امکان را میدهند که کدهایی بنویسید که برای انواع مختلف دادهها قابل استفاده باشند، بدون اینکه نیاز به تبدیل نوع دادهها داشته باشید. این امر منجر به امنیت نوع بیشتر و کارایی بالاتر در برنامهها میشود.
