جنریک‌ها در برنامه‌نویسی - مفهوم، مزیت‌ها و کاربردها با سورس

جنریک در برنامه‌نویسی، جنریک در سی‌شارپ، کلاس جنریک چیست 1404/8/11
نویسنده: مدرس بهمن آبادی

جنریک‌ها در برنامه‌نویسی

جنریک در سی شارپ

دانلود سورس ارسال پیامک و ایمیل با Generic

مقدمه

جنریک‌ها (Generics) یکی از ویژگی‌های مهم در بسیاری از زبان‌های برنامه‌نویسی مدرن مانند ‎C#‎، جاوا، تایپ‌اسکریپت، سوئیفت و Rust هستند.
هدف اصلی جنریک‌ها این است که امکان نوشتن کدهای انعطاف‌پذیر، امن، قابل‌استفاده مجدد و نوع‌محور را برای برنامه‌نویس فراهم کنند.

جنریک چیست؟

جنریک یعنی نوشتن کد با یک نوع عمومی (Type Parameter)، به‌طوری‌که بتوان آن را برای انواع مختلف دوباره استفاده کرد.
به زبان ساده:
یک بار کد می‌نویسی، برای چندین نوع مختلف استفاده می‌کنی.

مثال مفهومی:
اگر بخواهی یک کلاس ذخیره‌سازی داشته باشی که بتواند هم int نگه‌ دارد و هم string و هم یک کلاس سفارشی، دیگر نیازی نیست برای هر نوع یک کلاس جدا بسازی؛
یک کلاس جنریک می‌نویسی.

مزیت‌های جنریک‌ها

1. کاهش تکرار کد (Code Reuse)

به جای اینکه چند نسخه از یک کد بسازی، فقط یک نسخه می‌نویسی و برای انواع مختلف استفاده می‌کنی.

2. افزایش ایمنی برنامه (Type Safety)

وقتی از جنریک‌ها استفاده می‌کنی، کامپایلر از همان ابتدا نوع داده‌ها را بررسی می‌کند، پس خطاهای زمان اجرا کم‌تر می‌شود.

3. جلوگیری از Casting غیرضروری

بدون جنریک، معمولاً باید داده‌ها را Cast کنی.
Cast کردن سرعت را کم کرده و احتمال خطا را زیاد می‌کند.
جنریک‌ها این مشکل را حل می‌کنند.

4. کارایی بهتر نسبت به استفاده از Object

اگر به‌جای جنریک از نوع پایه‌ی object استفاده کنی، عملیات Boxing/Unboxing رخ می‌دهد که هزینه دارد.
ولی جنریک‌ها سریع‌تر و بهینه‌تر هستند.

5. قابلیت استفاده در ساختارهای پیچیده

جنریک‌ها پایهٔ بسیاری از ساختارهای مهم برنامه‌نویسی‌اند، مثل:

  • Repository Pattern

  • Dependency Injection

  • LINQ

  • Collection‌های تایپ‌محور

 

کاربردهای جنریک‌ها

1. در لیست‌ها و ساختمان داده‌ها

ساختمان‌های داده مثل

List<T>، Dictionary<TKey, TValue> و Queue<T>

همه با جنریک ساخته شده‌اند.

2. در طراحی کلاس‌های قابل‌استفاده مجدد

می‌توان کلاس‌هایی ساخت که با هر نوع کار کنند، مثل Repository یا Service.

3. در متدهای جنریک

متدی که نوع ورودی‌اش عمومی باشد و برای چندین نوع مختلف کار کند.

4. در اینترفیس‌ها و فریم‌ورک‌ها

کتابخانه‌های زیادی مانند Entity Framework و ASP.NET Core از جنریک‌ها استفاده می‌کنند.

مثال ساده از جنریک‌ها (C#)

مثال ۱: یک کلاس جنریک ساده

public class Box<T>
{
    public T Value { get; set; }

    public void Show()
    {
        Console.WriteLine($"Value: {Value}");
    }
}

 

استفاده:

 

var intBox = new Box<int> { Value = 10 };
var stringBox = new Box<string> { Value = "Hello" };

intBox.Show();     // Value: 10
stringBox.Show();  // Value: Hello

 

در این مثال:

  • یک بار کلاس نوشته شده

  • هزار بار می‌شود برای انواع مختلف استفاده‌اش کرد

 

مثال ۲: کلاس جنریک با محدودیت (Constraint)

public class Repository<T> where T : class
{
    public void Save(T entity)
    {
        Console.WriteLine($"{typeof(T).Name} saved.");
    }
}

 

استفاده:

 

public class User { }

var repo = new Repository<User>();
repo.Save(new User());

 

در اینجا T فقط می‌تواند یک کلاس باشد.

چرا جنریک‌ها مهم‌اند؟

چون در پروژه‌های واقعی:

  • ساختارهای مهم دیتا

  • معماری‌های لایه‌ای

  • پیاده‌سازی ریپازیتوری‌ها

  • ارتباط با دیتابیس

  • سیستم‌های DI

  • و حتی الگوریتم‌ها

همه به شکل گسترده از جنریک‌ها استفاده می‌کنند.

یک برنامه‌نویس حرفه‌ای بدون فهم عمیق جنریک‌ها نمی‌تواند کد تمیز، قابل نگه‌داری و استاندارد بنویسد.

در دوره برنامه نویسی وب مهندس بهمن آبادی تمامی این موارد آموزش داده شده اند این دوره شامل پشتیبانی همیشگی می باشد

جمع‌بندی

جنریک‌ها یک مفهوم کلیدی در برنامه‌نویسی هستند که امکان نوشتن کد

  • امن‌تر

  • سریع‌تر

  • تمیزتر

  • کم‌تکرارتر

را فراهم می‌کنند.
هر برنامه‌نویسی که بخواهد وارد دنیای توسعهٔ واقعی شود باید جنریک‌ها را به‌خوبی بشناسد.