الفئات العامة
أنواع حاويات قابلة لإعادة الاستخدام
الفئات العامة درس مجاني في C# Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C# Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C# Academy 4 دروس في المجموع.
ما الفئة العامة؟
تصرّح الفئة العامة بمعلمة نوع واحدة أو أكثر بين قوسين زاويين بعد اسم الفئة. ويمكن استخدام تلك المعلمات للحقول والخصائص وتواقيع الأساليب وأنواع الإرجاع في أنحاء الفئة.
يتيح ذلك كتابة حاوية أو خدمة واحدة تعمل مع أنواع كثيرة من العناصر مع الحفاظ على الكتابة القوية.
class Box<T>
{
public T Value { get; set; }
}إنشاء فئة عامة
لإنشاء مثيل، مرروا وسيطة نوع فعلية. يمثل Box<int> وBox<string> نوعين مُنشأين مختلفين.
يتصرف كل نوع مُنشأ كما لو أن T فيه استُبدلت بالنوع الفعلي في كل موضع.
using System;
class Box<T> { public T Value { get; set; } }
class Program
{
static void Main()
{
var b = new Box<int> { Value = 7 };
Console.WriteLine(b.Value);
}
}الحقول والخصائص العامة
تعمل معلمات الأنواع بوصفها أنواعًا للحقول والخصائص. وغالبًا ما تخزن المكدسات أو قوائم الانتظار أو ذاكرات التخزين المؤقت بياناتها في مصفوفة أو قائمة من T.
يبقى التخزين الداخلي آمنًا من ناحية النوع من دون عمليات تحويل.
class Pair<T>
{
public T First;
public T Second;
}معلمات أنواع متعددة
يمكن للفئة استقبال عدة معلمات أنواع. وغالبًا ما يستخدم النوع الذي يمثل زوجًا من مفتاح وقيمة أو نوعًا على نمط القاموس معلمتين.
تحسن الأسماء الوصفية مثل TKey وTValue قابلية القراءة عند وجود أكثر من معلمة.
class Entry<TKey, TValue>
{
public TKey Key { get; set; }
public TValue Value { get; set; }
}مكدس عام بسيط
إليكم مكدسًا عامًا صغيرًا مبنيًا على List<T>. يضيف Push عنصرًا إلى النهاية، بينما يزيل Pop عنصرًا من النهاية.
تخدم الفئة نفسها أنواع الأعداد الصحيحة والسلاسل النصية وأي نوع مرجعي أو قيمي.
using System;
using System.Collections.Generic;
class MyStack<T>
{
private readonly List<T> items = new();
public void Push(T item) => items.Add(item);
public T Pop()
{
var i = items[^1];
items.RemoveAt(items.Count - 1);
return i;
}
}
class Program
{
static void Main()
{
var s = new MyStack<string>();
s.Push("a");
s.Push("b");
Console.WriteLine(s.Pop());
}
}الأساليب العامة داخل الفئات العامة
يمكن للفئة العامة أيضًا التصريح بمعلمات أنواع إضافية في الأساليب الفردية. وتكون معلمات مستوى الأسلوب هذه مستقلة عن معلمات مستوى الفئة.
يضيف ذلك مرونة، مثل تحويل النوع المخزن إلى نوع آخر.
class Box<T>
{
public T Value;
public TOut Map<TOut>(Func<T, TOut> f) => f(Value);
}القيود على الفئة
مثل الأساليب، يمكن للفئة العامة تقييد معلمات أنواعها باستخدام where. وينطبق القيد على كل عضو يستخدم تلك المعلمة.
تتيح where T : class أدناه إسناد null وإجراء مقارنات بين المراجع.
class Repository<T> where T : class
{
private T current;
public bool IsEmpty => current is null;
}الأعضاء الثابتة مستقلة لكل نوع
يحصل كل نوع عام مُنشأ على نسخته الخاصة من أي حقول ثابتة. ويتتبع Counter<int> وCounter<string> عددين منفصلين.
يمثل ذلك فرقًا دقيقًا لكنه مهم عن الفئات غير العامة.
class Counter<T>
{
public static int Count;
}القيم الافتراضية في الفئات العامة
تحتاجون داخل الفئة العامة غالبًا إلى قيمة ابتدائية لحقل من النوع T. استخدموا default(T) أو الصيغة الأقصر default عندما يكون النوع معروفًا من السياق.
تُرجع هذه الصيغة null للأنواع المرجعية وقيمة الصفر لأنواع القيم.
class Slot<T>
{
public T Value = default!;
public bool HasValue { get; private set; }
}الوراثة من فئة عامة
يمكنكم الاشتقاق من فئة أساسية عامة. وقد تثبت الفئة الفرعية وسيطة النوع أو تظل عامةً هي نفسها.
يخصص تثبيت وسيطة النوع الفئة الأساسية، بينما يمرر بقاؤها عامةً المعلمة إلى الأعلى.
class Box<T> { public T Value; }
class IntBox : Box<int> { }
class NamedBox<T> : Box<T> { public string Name; }الأنواع العامة والمجموعات المضمنة
تزخر المكتبة الأساسية لـ .NET بالفئات العامة: List<T> وDictionary<TKey, TValue> وQueue<T>. وهذه هي الفائدة اليومية لتصميم الفئات العامة.
تتيح لكم كتابة أنواع عامة خاصة بكم توسيع الأسلوب الآمن والقابل لإعادة الاستخدام نفسه.
using System.Collections.Generic;
var scores = new Dictionary<string, int>();
scores["ada"] = 95;تحقق سريع
اختبروا مدى فهمكم للفئات العامة.
مراجعة
تصرّح الفئات العامة بمعلمات الأنواع بعد اسم الفئة، وتستخدمها للحقول والخصائص والأساليب. وتنشئونها باستخدام وسيطات أنواع فعلية، مما ينشئ أنواعًا مختلفة.
يمكنها إضافة معلمات أنواع على مستوى الأساليب، وحمل قيود where، والوراثة منها، والاحتفاظ بحالة ثابتة مستقلة لكل نوع. وتُعد المجموعات المضمنة المثال الأبرز على ذلك.
الأسئلة الشائعة
هل درس «الفئات العامة» مجاني؟
نعم — نص درس «الفئات العامة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C# Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C# Academy 4 دروس في المجموع.
ماذا ستتعلم في «الفئات العامة»؟
أنواع حاويات قابلة لإعادة الاستخدام تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C# Academy؟
لا تُشترط خبرة سابقة. C# Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «الفئات العامة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C# Academy هذا؟
نعم. كل درس في C# Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- الأساليب العامة
- الفئات العامة
- قيود where
- الواجهات العامة