0Pricing
C# Academy · درس

تعريف البُناة

أنشئوا كائنات باستخدام بُناة ذات معاملات

تعريف البُناة درس مجاني في C# Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C# Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C# Academy 4 دروس في المجموع.

ما المُنشئ؟

المُنشئ هو دالة خاصة تُنفّذ عند إنشاء كائن باستخدام new. وله الاسم نفسه الذي تحمله الفئة، ولا يملك نوع قيمة مُعادة. وتتمثل مهمته في وضع الكائن في حالة ابتدائية صالحة.

using System;

class Dog
{
    public Dog()
    {
        Console.WriteLine("A dog was created");
    }
}

class Program
{
    static void Main()
    {
        var d = new Dog();
    }
}

المنشئات ذات المعلمات

يمكن للمنشئ استقبال معلمات بحيث يزوّد المستدعي القيم الأولية. وهذا هو النمط الأكثر شيوعًا لتعيين البيانات المطلوبة.

using System;

class Person
{
    public string Name;
    public int Age;

    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }
}

class Program
{
    static void Main()
    {
        var p = new Person("Ada", 36);
        Console.WriteLine(p.Name + " is " + p.Age);
    }
}

الكلمة الأساسية this في المنشئات

عندما يتطابق اسم المعلمة مع اسم الحقل، استخدم this. للإشارة إلى الحقل وتمييزه عن المعلمة.

using System;

class Book
{
    public string Title;

    public Book(string title)
    {
        this.Title = title;
    }
}

class Program
{
    static void Main()
    {
        var b = new Book("C# Basics");
        Console.WriteLine(b.Title);
    }
}

المنشئ الافتراضي

إذا لم تكتب أي مُنشئ، فإن المترجم يوفر مُنشئًا بلا معلمات. لكن بمجرد تعريف أي مُنشئ، يختفي المُنشئ الافتراضي ما لم تضفه بنفسك.

using System;

class Empty
{
    // No constructor written -> compiler supplies a default one
    public int Value;
}

class Program
{
    static void Main()
    {
        var e = new Empty();
        Console.WriteLine("Default Value: " + e.Value);
    }
}

التحقق من الصحة في المنشئ

يمكن للمنشئ التحقق من معلماته، ما يضمن عدم إنشاء الكائن بحالة غير صالحة.

using System;

class Account
{
    public decimal Balance;

    public Account(decimal initial)
    {
        if (initial < 0)
            throw new ArgumentException("Initial balance cannot be negative");
        Balance = initial;
    }
}

class Program
{
    static void Main()
    {
        var a = new Account(100m);
        Console.WriteLine("Balance: " + a.Balance);
    }
}

التحميل الزائد للمنشئات

يمكن أن تحتوي الفئة على عدة منشئات ذات قوائم معلمات مختلفة. ويختار المترجم المنشئ المطابق للمعلمات التي تمررها.

using System;

class Point
{
    public int X;
    public int Y;

    public Point()
    {
        X = 0;
        Y = 0;
    }

    public Point(int x, int y)
    {
        X = x;
        Y = y;
    }
}

class Program
{
    static void Main()
    {
        var origin = new Point();
        var p = new Point(3, 4);
        Console.WriteLine(origin.X + "," + origin.Y + " | " + p.X + "," + p.Y);
    }
}

تعيين الخصائص من المنشئ

تُسنِد المنشئات عادةً قيمًا إلى الخصائص التلقائية، بما في ذلك الخصائص التي لا تُسنَد إلا أثناء التهيئة أو التي لها دوال إسناد خاصة.

using System;

class Product
{
    public string Name { get; }
    public decimal Price { get; }

    public Product(string name, decimal price)
    {
        Name = name;
        Price = price;
    }
}

class Program
{
    static void Main()
    {
        var p = new Product("Pen", 1.50m);
        Console.WriteLine(p.Name + ": " + p.Price);
    }
}

القيم الافتراضية للمعلمات

يمكن أن تتضمن معلمات المنشئ قيمًا افتراضية، مما يتيح للمستدعين حذفها. ويقلل ذلك غالبًا الحاجة إلى عدة منشئات محمّلة زائدًا.

using System;

class Circle
{
    public double Radius;
    public string Color;

    public Circle(double radius, string color = "black")
    {
        Radius = radius;
        Color = color;
    }
}

class Program
{
    static void Main()
    {
        var c1 = new Circle(2);
        var c2 = new Circle(3, "red");
        Console.WriteLine(c1.Color + " | " + c2.Color);
    }
}

تنفيذ العمل في المنشئ

إضافةً إلى إسناد الحقول، يمكن للمنشئ حساب البيانات المشتقة أو تجهيز الموارد التي يحتاج إليها الكائن.

using System;

class Rectangle
{
    public double Width;
    public double Height;
    public double Area;

    public Rectangle(double w, double h)
    {
        Width = w;
        Height = h;
        Area = w * h;
    }
}

class Program
{
    static void Main()
    {
        var r = new Rectangle(4, 5);
        Console.WriteLine("Area: " + r.Area);
    }
}

المنشئات والبيانات المطلوبة

يؤدي وضع القيم المطلوبة في المنشئ إلى جعلها إلزامية؛ فلا يمكنك إنشاء الكائن من دون توفيرها.

using System;

class User
{
    public string Id;
    public string Email;

    public User(string id, string email)
    {
        Id = id;
        Email = email;
    }
}

class Program
{
    static void Main()
    {
        var u = new User("u1", "a@b.com");
        Console.WriteLine(u.Id + " / " + u.Email);
    }
}

جمع العناصر معًا

يتحقق المنشئ المصمم جيدًا من صحة الإدخال، ويسند القيم إلى الحقول، ويترك الكائن جاهزًا للاستخدام بالكامل.

using System;

class Temperature
{
    public double Celsius { get; }
    public double Fahrenheit { get; }

    public Temperature(double celsius)
    {
        if (celsius < -273.15)
            throw new ArgumentException("Below absolute zero");
        Celsius = celsius;
        Fahrenheit = celsius * 9 / 5 + 32;
    }
}

class Program
{
    static void Main()
    {
        var t = new Temperature(25);
        Console.WriteLine(t.Celsius + "C = " + t.Fahrenheit + "F");
    }
}

تحقق سريع

اختبروا مدى فهمكم للمُنشئات.

مراجعة

يشترك المُنشئ مع الفئة في الاسم، ولا يملك نوع إرجاع، ويُنفَّذ عند استخدام new. تأخذ المُنشئات ذات المعلمات قيمًا أولية؛ وتُستخدم this. لتمييز الحقول عن المعلمات. يمكنكم استخدام التحميل الزائد للمُنشئات وتعيين قيم افتراضية للمعلمات. ويؤدي تعريف أي مُنشئ إلى إزالة المُنشئ الافتراضي المُنشأ تلقائيًا.

using System;

class Demo
{
    public string Name;
    public Demo(string name = "anon")
    {
        this.Name = name;
    }
}

class Program
{
    static void Main()
    {
        Console.WriteLine(new Demo().Name);
        Console.WriteLine(new Demo("Kai").Name);
    }
}

الأسئلة الشائعة

هل درس «تعريف البُناة» مجاني؟

نعم — نص درس «تعريف البُناة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C# Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C# Academy 4 دروس في المجموع.

ماذا ستتعلم في «تعريف البُناة»؟

أنشئوا كائنات باستخدام بُناة ذات معاملات تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C# Academy؟

لا تُشترط خبرة سابقة. C# Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «تعريف البُناة»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C# Academy هذا؟

نعم. كل درس في C# Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. تعريف البُناة
  2. تسلسل استدعاء البُناة باستخدام this
  3. مهيئات الكائنات والمجموعات
  4. البُناة الساكنة
← العودة إلى C# Academy