تغییر ایجاد کن

طبقه بندی موضوعی
جمعه, ۱۶ تیر ۱۳۹۶، ۱۱:۰۵ ق.ظ

سازنده چیست؟

سازنده چیست؟

فرض کنید میخواهیم یک آبجکت از کلاس person  ایجاد کنیم:

Person person_1 = new Person();

 

منظور از new person() چیست؟

این عبارت در واقع سازنده کلاس است که باعث مقدار دهی اولیه (initialize) کردن فیلد های کلاس می شود. در هر کلاسی بدون این که نمایان باشد سازنده وجود دارد. تمام این سازنده هایی که توسط برنامه نویس نوشته نشده است دارای سطح دسترسی public می باشد و هیچ برگشتی حتی void هم ندارد. هیچ آرگومانی نمی پذیرد. هر فیلد عددی را برابر صفر و هر فیلد bool را برابر false و هر فیلد ارجاعی را برابر null قرار خواهد داد.

 

 می توان سازنده هارا overload کرد و از این طریق از آنها استفاده کرد.

فرض کنید کلاسی به نام person  داریم. سازنده زیر را برای آن می نویسیم:

class Person

    {

      

        public Person(string name,string family)

        {

            this.Name = name;

            this.Family = family;

 

        }

        private string _name;

        private string _family;

 

        public string Name { get { return _name; } set { _name = value; } }

        public string Family { get { return _family; } set { _family = value; } }

        public string ShowInfo { get { return string.Format("{0}{1}", this.Name, this.Family); } }

 

    }

 

 

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

static void Main(string[] args)

        {

            Person person_1 = new Person("sara","amini");

            Person person_2 = new Person("ali", "ahmadi");

            Console.WriteLine("{0}\n\r{1}", person_1.ShowInfo,person_2.ShowInfo);

        }

 

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

 

تجربه شخصی:

در ابتدا من در کلاس person  سازنده ی پیش فرض را پاک کردم و سازنده ی حاوی دو پارامتر را جایگزین نمودم و در main اینگونه نوشتم:

static void Main(string[] args)

        {

            Person person_1 = new Person();

            Person person_2 = new Person("ali", "ahmadi");

            Console.WriteLine("{0}\n\r{1}", person_1.ShowInfo,person_2.ShowInfo);

        }

 

خطای زیر ایجاد شد:

Error  1   'chapter00.Person' does not contain a constructor that takes 0 arguments   

میشه حدس زد مشکل از کجا بود. من سازنده پیش فرض که هیچ آرگومانی نمی پذیرفت را پاک کرده بودم و سازنده ی دو پارامتری خودم را جایگزین کرده بودم و احتمالا کامپایلر نمیدوست که بعد از ساخت آبجکت person_1 از کدام سازنده استفاده کند. این مشکل با تعریف دوباره سازنده پیش فرض void و بدون پارامتر حل شد.

البته سوالی که هنوز تو ذهنمه اینه که مگر سازنده پیش فرض توسط کامپایلر ساخته نمیشه و همیشه وجود نداره؟ یعنی با پاک کردنش توسط من کلا از بین رفت؟

باید درباره این موضوع با کسی صحبت کنم! 

موافقین ۰ مخالفین ۰ ۹۶/۰۴/۱۶
عارفه ..

سازنده

سی شارپ

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی