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

طبقه بندی موضوعی
چهارشنبه, ۴ مرداد ۱۳۹۶، ۱۰:۵۲ ق.ظ

مثالی از ارث بری در سی شارپ

فرض کنید کلاسی به نام Person داریم و کلاس دیگری به نام Student . کلاس Student برخی از ویژگی های کلاس  Person و یکسری ویژگی های دیگر نیز دارد. ما می توانیم از مفهوم ارث بری استفاده کنیم. به صورتی که کلاس Person پدر و کلاس Student  فرزند باشد.

class Person

    {

        //سازنده پیش  فرض

        public Person()

        {

 

        }

 

        public Person(string name, string family)

        {

            this.Name = name;

            this.Family = family;

        }

        public string Name { get; set; }

        public string Family { get; set; }

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

 

    }

 

 

 

    //از پرسن به ارث گرفته شده

    class Student:Person

    {

        public Student()

        {

 

        }

       

        public Student(string name,string family, int id):base(name,family)

        {

            this.ID = id;

        }

        public int ID { get; set; }

        public override string Display { get { return string.Format

            ("Name:{0}\r\n family:{1} \r\n ID: {2}", base.Name, base.Family, this.ID); } }

       

 

    } 

همان طور که میبینید با قرار دادن دو نقطه جلوی نام کلاس  Student و نوشتن نام کلاس Person میتوانیم مشخص کنیم که کدام یک پدر و کدام یک فرزند باشند.

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

عمل explicite و implicite را میتوان برای آبجکت های ساخته شده هم اعمال کرد. مثلا در مثال بالا گفتیم که کلاس Student  از کلاس Person به ارث برده شده است.

یک آبجکت از کلاس Student ایجاد می کنیم:


Student student_3 = new Student("mahtab", "ahmadi", 33265);

حالا یک آبجکت از کلاس Person ایجاد کرده و آن را برابر آبجکت ساخته شده از کلاس Student  قرار می دهیم. توجه کنید که کلاس Person  پارچ وکلاس Student  لیوان است. چون Student از Person به ارث برده شده است. 

Person person_2 = student_3; //ok

هیچ خطایی پیش نمی آید چون شما مقدار لیوان را درون پارچ ریختید.

حالا شرایط را عوض می کنیم و یک آبجکت از کلاس Person  می سازیم.

Person Person_1 = new Person("ali", "alavi");

حالا یک آبجکت از کلاس Student  می سازیم و آن را برابر آبجکت ساخته شده از کلاس Person قرار می دهیم. یعنی میخواهیم پارچ را درون لیوان بریزیم. خطا ایجاد می شود.

Student student_4 = Person_1; //error

 

لذا از explicite استفاده کرده و صریحا اعلام می کنیم.


Student student_4 =(Student) Person_1;//error

اما باز هم خطا ایجاد می شود. حالا آبجکت Student_4 را برابر Person_2 که قبلا مقدار Student_3 را در آن implicite کرده بودیم، می کنیم. هیچ خطایی ایجاد نمی شود.   

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

                                                                                                                                 



Student student_4 = (Student)person_2;  //ok






نظرات  (۰)

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

ارسال نظر

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