مثيل المنشئات (البرمجة C# إرشادات)

تستخدم لإنشاء مثيل المنشئات و يهيّئ أية متغيرات عضو مثيل عند استخدام التعبير جديد لإنشاء كائن من على فئة . إلى يهيّئ a ثابت فئة, أو ثابت متغيرات في a non-ثابت فئة, you must define a ثابت الدالة الإنشائية. لمزيد من المعلومات، راجع الدالة الإنشائية الثابتة (إرشادات برمجة C#).

The following مثال shows an مثيل الدالة الإنشائية:

class CoOrds
{
    public int x, y;

    // constructor
    public CoOrds()
    {
        x = 0;
        y = 0;
    }
}

ملاحظة

For clarity, this فئة يحتوي على public حقول. The استخدم of public حقول ليس a recommended programming practice because it allows أي أسلوب anywhere في a برنامج غير مقيد و unverified الوصول إلى an كائن's inner workings. الأعضاء البيانات عادة خاصة، ويجب أن يتم الوصول إليه فقط through فئة الأساليب والخصائص.

This مثيل الدالة الإنشائية هو called whenever an كائن based تشغيل the CoOrds فئة هو تاريخ الإنشاء. A الدالة الإنشائية مثل this واحد, which takes لا الوسيطات, هو called a الافتراضي الدالة الإنشائية. However, it هو often useful إلى provide إضافى constructors. على سبيل المثال، يمكن لنا إضافة على الدالة الإنشائية إلى CoOrdsالفئة التي تسمح لنا بتحديد قيم الأولية الأعضاء البيانات:

// tcA constructor with two arguments:
public CoOrds(int x, int y)
{
    this.x = x;
    this.y = y;
}

This allows CoOrd الكائنات إلى be تاريخ الإنشاء مع الافتراضي أو specific initial قيم, مثل this:

CoOrds p1 = new CoOrds();
CoOrds p2 = new CoOrds(5, 3);

If a فئة does not have a الدالة الإنشائية, a الافتراضي الدالة الإنشائية هو automatically generated و الافتراضي قيم are used إلى يهيّئ the كائن حقول. For مثال, an int هو initialized إلى 0. For المزيد معلومات تشغيل الافتراضي قيم, see جدول القيم الافتراضية ( مرجع C# ). Therefore, because the CoOrds فئة الافتراضي الدالة الإنشائية initializes الجميع بيانات الأعضاء إلى zero, it can be تمت إزالته altogether without changing how the فئة works. A إكمال مثال using multiple constructors هو provided في مثال 1 later في this موضوع, و an مثال of an automatically generated الدالة الإنشائية هو provided في مثال 2.

يمكنك أيضا استخدام مثيل construcإلىrs إلى استدعاء construcإلىrs مثيل من فئات أساسية. فئة يمكن استدعاء المنشئ الدالة الإنشائية قاعدة فئة من خلال طرح مهيئ، كما يلي:

class Circle : Shape
{
    public Circle(double radius)
        : base(radius, 0)
    {
    }
}

في ترتيب هو سبيل المثال، في Circleفئة بتمرير قيم التي تمثل نصف القطر وارتفاع الموفرة من قبل الدالة الإنشائية Shapeمنها Circleهو مشتقة. مثال كاملة عن استخدام Shapeو Circleيظهر في هذا الموضوع كـ المثال 3.

مثال 1

يوضح المثال التالي فئة ذات المنشئات فئة الثاني، واحد بدون وسيطات و بالوسيطتين.

class CoOrds
{
    public int x, y;

    // Default constructor:
    public CoOrds()
    {
        x = 0;
        y = 0;
    }

    // tcA constructor with two arguments:
    public CoOrds(int x, int y)
    {
        this.x = x;
        this.y = y;
    }

    // Override the ToString method:
    public override string ToString()
    {
        return (String.Format("({0},{1})", x, y));
    }
}

class MainClass
{
    static void Main()
    {
        CoOrds p1 = new CoOrds();
        CoOrds p2 = new CoOrds(5, 3);

        // Display the results using the overriden ToString method:
        Console.WriteLine("CoOrds #1 at {0}", p1);
        Console.WriteLine("CoOrds #2 at {0}", p2);
        Console.ReadKey();
    }
}
/* Output:
 CoOrds #1 at (0,0)
 CoOrds #2 at (5,3)        
*/

مثال 2

في ترتيب هو سبيل المثال، الفئة Personلم يكن أي المنشئات، في هذه الحالة، الدالة الإنشائية افتراضي هو تلقائياً بتوفير وتهيئة حقول إلى قيم الافتراضية الخاصة بها.

public class Person
{
    public int age;
    public string name;
}

class TestPerson
{
    static void Main()
    {
        Person person = new Person();

        Console.WriteLine("Name: {0}, Age: {1}", person.name, person.age);
        // Keep the console window open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}
// Output:  Name: , Age: 0

لاحظ أنه الافتراضي القيمة ageهو 0و الافتراضي القيمة nameهو null. For المزيد معلومات تشغيل الافتراضي قيم, see جدول القيم الافتراضية ( مرجع C# ).

مثال 3

يوضح المثال التالي استخدام القاعدة فئة مهيئ. Circleالفئة هو المشتقة من الفئة عام Shape، و Cylinderالفئة هو المشتقة من Circleclass. الدالة الإنشائية تشغيل كل اشتقاق فئة هو استخدام مهيئ فئة Base الخاصة به.

abstract class Shape
{
    public const double pi = Math.PI;
    protected double x, y;

    public Shape(double x, double y)
    {
        this.x = x;
        this.y = y;
    }

    public abstract double Area();
}

class Circle : Shape
{
    public Circle(double radius)
        : base(radius, 0)
    {
    }
    public override double Area()
    {
        return pi * x * x;
    }
}

class Cylinder : Circle
{
    public Cylinder(double radius, double height)
        : base(radius)
    {
        y = height;
    }

    public override double Area()
    {
        return (2 * base.Area()) + (2 * pi * x * y);
    }
}

class TestShapes
{
    static void Main()
    {
        double radius = 2.5;
        double height = 3.0;

        Circle ring = new Circle(radius);
        Cylinder tube = new Cylinder(radius, height);

        Console.WriteLine("Area of the circle = {0:F2}", ring.Area());
        Console.WriteLine("Area of the cylinder = {0:F2}", tube.Area());

        // Keep the console window open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}
/* Output:
    Area of the circle = 19.63
    Area of the cylinder = 86.39
*/

للحصول تشغيل المزيد من الأمثلة تشغيل استدعاء المنشئات فئة الأساس، راجع الظاهري ( مرجع C# )، override (مرجع #C)، و base (مرجع #C).

راجع أيضًا:

المرجع

الفئات والبنيات (دليل البرمجة لـ #C)

دالات الإنشاء (دليل البرنامج لـ #C)

المتلفات ( ارشادات البرمجة #C )

ثابت (C# مرجع)

المبادئ

دليل البرمجة لـ #C