متد سازنده کلاس های فرزند
نام دوره: زبان سی شارپ مقدماتی
نویسنده: علی مقدم جاه (مدرس دوره)
متد سازنده کلاس های فرزند
در پست آموزش متد سازنده یا Constructor و همچنین در پست آموزش ارثبری در کلاسها، با مفاهیم اولیه این پست آموزشی آشنا شدهاید.
زمانی که چندین کلاس دارای عضوهای مشترک باشند، میتوانیم آن عضوهای مشترک را درون یک کلاس مدل قرار دهیم تا آن کلاس به عنوان کلاس والد تمامی این کلاسهای فرزند قرار گیرد.
دراینصورت تمامی پراپرتیها، متدها و دیگر اعضا مشترک کلاسهای فرزند را درون این کلاس والد تعریف میکنیم.
اما مشکلی که بوجود خواهد آمد، در بحث مقداردهی پراپرتیهای مشترکی است که درون کلاس والد تعریف شدند!
فرض کنید یک کلاس فرزند به نام Strudent دارید با سه پراپرتی Name و Family و Phone و یک کلاس والد به نام Person که دارای یگ پراپرتی به نام Id است.
کلاس Student
class Student
{
public string Name { get; set; }
public string Family { get; set; }
public string Phone{ get; set; }
}
کلاس Person
class Person
{
public string Id{ get; set; }
}
درنتیجه اگر بخواهید در برنامه خود یک شئ یا نمونه از کلاس Student تعریف کنید، قطعا باید مقداری را برای پراپرتی Id نیز مشخص کنید؛ اما اینجا سوال پیش میآید که چطور وقتی پراپرتی Id درون کلاس Student نوشته نشده، آن را به عنوان ورودی در متد سازنده کلاس Student استفاده کنیم؟
اینجاست که کلمه کلیدی base به کمک ما میآید.
کلمه کلیدی base یه زبان ساده، وظیفه ارسال مقدار به متد سازنده کلاس والد را دارد. درنتیجه ما در وهله اول باید یک متد سازنده در کلاس والد یا همان Person بابت مقداردهی پراپرتی Id تعریف کنیم:
class Person
{
public string Id{ get; set; }
public Person (int Id)
{
this.Id = Id;
}
}
حال که برای کلاس والد یک متد سازنده تعریف کردیم، باید حتما برای تمامی کلاسهای فرزند مثل Student یک متد سازنده مشخص کنیم، چرا که وقتی کلاس والد متد سازنده غیر پیش فرض دارد، پس تمامی کلاسهای فرزند هم باید یک متد سازنده غیر پیش فرض داشته باشند.
پس یک متد سازنده درون کلاس Student تعریف میکنیم:
class Student
{
public string Name { get; set; }
public string Family { get; set; }
public string Phone{ get; set; }
public Student (string Name, string Family, String Phone)
{
this.Name = Name;
this.Family= Family;
this.Phone= Phone;
}
}
حال که متد سازنده کلاس فرزند یعنی Student تعریف شد، باید یک فکری بابت مقداردهی پراپرتی Id داخل کلاس والد یا همان Person بکنیم.
از آنجایی که در زمان تعریف شئ از کلاس Student باید پراپرتی Id مقداردهی شود، درنتیجه باید این تغییرات بر روی متد سازنده کلاس Student انجام شود.
به همین منظور ابتدا یک ورودی از نوع int به نام Id به ورودیهای متد سازنده کلاس فرزند یا همان Student اضافه میکنیم:
class Student
{
public string Name { get; set; }
public string Family { get; set; }
public string Phone{ get; set; }
public Student (int Id, string Name, string Family, String Phone)
{
this.Name = Name;
this.Family= Family;
this.Phone= Phone;
}
}
اما از آنجایی که پراپرتی Id درون کلاس Student تعریف نشده، پس نمیتوانیم درون محدوده بلاک متد سازنده کلاس Student آن را مقداردهی کنیم؛ بلکه مقداردهی این پراپرتی تنها توسط متد سازنده کلاس والد یا همان Person انجام میشود.
درنتیجه باید این مقدار را که به عنوان id از طریق متد سازنده کلاس Student دست یافتیم، برای متد سازنده کلاس والد یا همان Person ارسال کنیم تا متد سازنده کلاس والد اقدام به مقداردهی پراپرتی Id کند.
برای ارسال این مقدار به متد سازنده کلاس والد، کافی است تا جلوی پرانتر بسته متد سازنده کلاس فرزند، کلمه کلیدی base را نوشته و یک پرانتر باز و بسته برای آن درج کنیم:
class Student
{
public string Name { get; set; }
public string Family { get; set; }
public string Phone{ get; set; }
public Student (int Id, string Name, string Family, String Phone):base( )
{
this.Name = Name;
this.Family= Family;
this.Phone= Phone;
}
}
حالا ابزار ارسال داده ورودی برای مقداردهی پراپرتی Id درون متد سازنده والد آماده بوده و تنها کافی است تا نام شناسه آن مقداری که توسط متد سازنده در زمان تعریف شئ جدید از کلاس فرزند با خود به همراه آورده است را درون پرانتز جلوی کلمه کلیدی base قرار دهیم:
class Student
{
public string Name { get; set; }
public string Family { get; set; }
public string Phone{ get; set; }
public Student (int Id, string Name, string Family, String Phone):base(Id)
{
this.Name = Name;
this.Family= Family;
this.Phone= Phone;
}
}
همانطور که مشاهده میکنید، کلمه Id که به عنوان شناسه متغیر تعریف شده برای ورودی در متد سازنده کلاس فرزند بوده را درون پرانتز جلوی کلمه کلیدی base مینویسیم تا مقدار درون آن برای متد سازنده کلاس والد ارسال شود.
حال که این مقدار برای متد سازنده کلاس والد ارسال شده، ابتدا پراپرتی Id مقداردهی شده و سپس مقادیر Name و Family و Phone درون پراپرتیهای خود درج شده و اطلاعات شئ جدید از کلاس فرزند درون دیتابیس ذخیره میشود.
جهت شرکت در دورههای زبان برنامه نویسی سیشارپ، از کد تخفیف heplc30 استفاده کنید.