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

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

آرایه از جنس کلاس

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

http://opizo.com/h13u1h


Person[] PersonList= new Person[]

 {new Person("Amir","chabok"),new Student("Hossein","sadeghi",110), new Person("Ali","jahanshiri") , new Student ("mehdi","javanmard",5465), new Teacher("sara"," alavi",9898)};

 

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

هم چنین می توان از حلقه ی Foreach برای نمایش محتویات آرایه استفاده کرد. مثلا در مثال زیر حلقه ی Foreach مشخص میکند که Person جنس آرایه است . P نامی دلخواه است و این عملیات نیز در کالکشن  Person list انجام می شود. Display یک پراپرتی جهت نمایش اطلاعات در کلاس Person من است.

foreach (Person p in PersonList)

            {

                         Console.WriteLine(p.Display);

            }

 

 

 

 

 

 

 

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

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 string Display { get {return string.Format("Name: {0}{1}",this.Name,this.Family) ;} }

 

    }

}

هم چنین کلاس Student  هم داریم که دارای یک پراپرتی جهت نمایش اطلاعات نام و نام خانوادگی و آیدی می باشد که همنام پراپرتی کلاس پدر می باشد و Display نام دارد.

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  string Display{ get { return string.Format

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

       

 

    }

 

حالا در متد  main برنامه کد زیر را می نویسیم. یک آبجکت از کلاس Student  تعریف کرده و مقادیر آن را تکمیل می کنیم و سپس آن را به صورت implicite به یک آبجکت از جنس Person، cast می کنیم. برنامه اجرا می شود اما مقدار آیدی چاپ نمی شود. به این خاطر که به صورت پیش فرض Display مربوط به کلاس Person فراخوانی می شود که شامل آیدی  نمی باشد.

Student student_1 = new Student("ali", "alavi", 123);

            Person person_1 = student_1;

 

            Console.WriteLine(person_1.Display);

 

برای حل این مشکل در هنگام تعریف پراپرتی در کلاس پدر قبل از نام پراپرتی کلمه ی Virtual قرار می دهیم

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

 

 و قبل از نام پراپرتی در کلاس فرزند کلمه ی override را قرار می دهیم

public override string Display{ get { return string.Format

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

       

 

همین طور که جلوتر میروید تعداد کلاس ها افزایش می یابد و تشخیص و تعیین virtual و یا override بودن کلاس ها بسی سخت و وقت گیر خواهد شد لذا روش آسان تری هم وجود دارد

ابتدا پراپرتی کلاس student را پاک می کنیم و به جای آن کد زیر را می نویسیم

public override string ToString()

        {

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

        }

پراپرتی کلاس Person را هم پاک میکنیم و به جای آن کد زیر را قرار می دهیم

public override string ToString()

        {

            return string.Format("name:{0}\r\n family:{1}\r\n", this.Name, this.Family);

        }

و در متد main نیز در بخش foreach نیز کلمه ی Display را پاک میکنیم.

foreach (Person p in PersonList)

            {

                Console.WriteLine(p);

            }

 

 

نظرات  (۰)

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

ارسال نظر

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