الدمج مع الخصائص والأنواع الأساسية
مرّروا المعاملات إلى الأنواع والخصائص الأساسية
الدمج مع الخصائص والأنواع الأساسية درس مجاني في C# Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C# Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C# Academy 4 دروس في المجموع.
دمج المُنشئات الأساسية مع الوراثة
يمكن لفئة مشتقة ذات مُنشئ أساسي تمرير معلماتها إلى فئة أساسية باستخدام الصياغة : Base(args) في الترويسة.
using System;
class Animal(string name) {
public string Name => name;
}
class Dog(string name) : Animal(name) {
public string Speak() => Name + " says Woof";
}
Console.WriteLine(new Dog("Rex").Speak()); // Rex says Woofتمرير مجموعة فرعية من المعلمات
يمكن للفئة المشتقة قبول معلمات أكثر من الفئة الأساسية وتمرير المعلمات ذات الصلة فقط إلى الفئة الأساسية.
using System;
class Shape(string color) {
public string Color => color;
}
class Box(string color, int size) : Shape(color) {
public int Size => size;
}
var b = new Box("red", 5);
Console.WriteLine(b.Color + " " + b.Size); // red 5تحويل الوسائط إلى الفئة الأساسية
يمكنكم حساب وسائط مُنشئ الفئة الأساسية من معلمات الفئة المشتقة مباشرةً في الترويسة.
using System;
class Label(string text) {
public string Text => text;
}
class UpperLabel(string text) : Label(text.ToUpper()) {
}
Console.WriteLine(new UpperLabel("hi").Text); // HIإضافة الخصائص إلى جانبها
يمكن أن يتعايش المُنشئ الأساسي مع الخصائص الصريحة. هيّئوا الخصائص من المعلمات عند الإعلان عنها.
using System;
class Product(string name, decimal price) {
public string Name { get; } = name;
public decimal Price { get; set; } = price;
}
var p = new Product("Book", 12m);
p.Price = 10m;
Console.WriteLine(p.Name + " " + p.Price); // Book 10معلمات الفئة الأساسية واستخدامها في الفئة المشتقة
حتى بعد تمرير معلمة مُنشئ الفئة المشتقة إلى الفئة الأساسية، يظل بإمكانكم استخدامها في جسم الفئة المشتقة.
using System;
class Base(int id) {
public int Id => id;
}
class Item(int id, string label) : Base(id) {
public string Describe() => "#" + id + ": " + label;
}
Console.WriteLine(new Item(7, "Widget").Describe()); // #7: Widgetالسجلات والمُنشئات الأساسية
تستخدم السجلات المُنشئات الأساسية لإنشاء خصائص عامة لا يمكن تهيئتها إلا باستخدام init تلقائيًا. ويُعد السجل الموضعي الحالة الأكثر إيجازًا.
using System;
record Person(string First, string Last) {
public string Full => First + " " + Last;
}
Console.WriteLine(new Person("Ada", "Lovelace").Full); // Ada Lovelaceوراثة السجلات
تمرّر السجلات المشتقة معلماتها موضعيًا إلى سجل أساسي، فتُنشئ مجموعة الخصائص المدمجة.
using System;
record Vehicle(string Make);
record Car(string Make, int Doors) : Vehicle(Make);
var c = new Car("Toyota", 4);
Console.WriteLine(c.Make + " " + c.Doors); // Toyota 4التحقق قبل استدعاء الفئة الأساسية
إذا احتجتم إلى التحقق، فأجروه في مُهيِّئ خاصية باستخدام تعبير throw؛ إذ يظل استدعاء الفئة الأساسية يُنفَّذ أولًا.
using System;
class Base(string tag) { public string Tag => tag; }
class Node(string tag) : Base(tag) {
public string Tag2 { get; } =
tag.Length > 0 ? tag : throw new ArgumentException("empty");
}
Console.WriteLine(new Node("a").Tag); // aمزج المعلمات المُلتقطة والخصائص
يمكنكم الاحتفاظ ببعض المعلمات كحالة خاصة مُلتقطة، وعرض معلمات أخرى كخصائص، لتخصيص الواجهة العامة.
using System;
class Order(int id, decimal total) {
public decimal Total { get; } = total; // public
public string Reference() => "ORD-" + id; // id stays private
}
var o = new Order(42, 99m);
Console.WriteLine(o.Reference() + " " + o.Total); // ORD-42 99القيم الافتراضية للخصائص
يمكن أن تحتوي الخصائص غير المرتبطة بالمعلمات على مُهيِّئات افتراضية، وأن تتعايش بحرية مع معلمات المُنشئ الأساسي.
using System;
class Session(string user) {
public string User { get; } = user;
public bool Active { get; set; } = true;
}
var s = new Session("kai");
Console.WriteLine(s.User + " " + s.Active); // kai Trueتجميع المفاهيم
فئة مشتقة تمرّر المعلمات إلى فئة أساسية، وتضيف خاصية، وتعرض عضوًا محسوبًا.
using System;
class Employee(string name) {
public string Name => name;
}
class Manager(string name, int teamSize) : Employee(name) {
public int TeamSize { get; } = teamSize;
public string Title => Name + " (manages " + TeamSize + ")";
}
Console.WriteLine(new Manager("Sam", 5).Title); // Sam (manages 5)تحقق سريع
تحققوا من كيفية تمرير المُنشئات الأساسية المعلمات إلى الفئات الأساسية.
مراجعة
تعلّمتم دمج المُنشئات الأساسية مع الخصائص والفئات الأساسية.
- تمرّر
class D(...) : Base(args)المعلمات إلى الفئة الأساسية. - يمكن حساب الوسائط الممرّرة إلى الفئة الأساسية مباشرةً.
- يمكن تهيئة الخصائص من المعلمات عند الإعلان عنها.
- تنشئ السجلات خصائص عامة لا يمكن تهيئتها إلا باستخدام
initمن المعلمات الموضعية.
الأسئلة الشائعة
هل درس «الدمج مع الخصائص والأنواع الأساسية» مجاني؟
نعم — نص درس «الدمج مع الخصائص والأنواع الأساسية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C# Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C# Academy 4 دروس في المجموع.
ماذا ستتعلم في «الدمج مع الخصائص والأنواع الأساسية»؟
مرّروا المعاملات إلى الأنواع والخصائص الأساسية تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C# Academy؟
لا تُشترط خبرة سابقة. C# Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «الدمج مع الخصائص والأنواع الأساسية»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C# Academy هذا؟
نعم. كل درس في C# Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- البُناة الأساسيون في الفئات
- التقاط المعاملات في الأعضاء
- البُناة الأساسيون مع Structs
- الدمج مع الخصائص والأنواع الأساسية