کارهای جذاب با تابع سازنده Constructor در سی شارپ


در حال دیدن ویدیو هایی در رابطه با زبان سی شارپ بودم که متوجه یک نکته جالب شدم که برای خودم هیجان انگیز بود و گفتم شاید برای شما نیز جالب و کاربردی باشد.

در زبان سی شارپ، کلاس ها توابعی تحت عنوان سازنده (Constructor) دارند که در موقع ساخت یک نمونه (instance) از یک کلاس فراخوانی می شوند و کار هایی که برا آن ها تعریف شده باشد را انجام میدهند.

در کلاس ها می توانیم چندین تابع سازنده داشته باشیم که هرکدام متناسب با پارامتر هایی که می خواهند صدا زده شوند. ماننده مثال زیر:


class Person
{
    public string Name;
    public int id;
    public Person( )
    {
        Console.WriteLine(&quotperson Constructor 0&quot);
    }
    public Person(int id)
    {
        this.id = id;
        Console.WriteLine(&quotperson Constructor 1&quot);
    }
    public Person(int id, string name)
    {
        this.id = id;
        this.Name = name;
        Console.WriteLine(&quotperson Constructor 2&quot);
     }
}




حال ما می توانیم یک نمونه از این کلاس بسازیم و متناسب با پارامتر هایی که به تابع سازنده آن ارسال میکنیم، یکی از توابع سازنده آن اجرا شوند.

احتمالا خیلی از دوستان تا به اینجای مسئله را آگاهی دارند اما نکته قابل توجه و جالبی که می خواستم راجب آن با شما صحبت کنم این است که ما می توانیم این توابع سازنده را به ترتیب و پشت هم با یک دستور فرا خوانی کنیم :)

به اسکریپت زیر که تغییر یافته اسکریپت بالا با استفاده از نکته ذکر شده است توجه کنید :


class Person
{
    public string Name;
    public int id;
    public Person()
    {
        Console.WriteLine(&quotperson Constructor 0&quot);
    }
    public Person(int id)
    : this()
    {
        this.id = id;
        Console.WriteLine(&quotperson Constructor 1&quot);
    }
    public Person(int id, string name)
    : this(id)
    {
        this.Name = name;
        Console.WriteLine(&quotperson Constructor 2&quot);
    }
}

حال اگر قطعه کد زیر را در تابع Main اجرا کنیم شاهد فراخوانی تمامی توابع سازنده خواهیم بود که به ترتیب فراخوانی می شوند.

var p = new Person(5, &quotsina&quot);




این هم از خروجی به همراه دو قطعه کد اضافی


موفق و خندون باشید. :)