کلمه کلیدی base
نام دوره: زبان سی شارپ مقدماتی
نویسنده: علی مقدم جاه (مدرس دوره)
کلمه کلیدی base
کلمه کلیدی base دوجا در مبحث شئ گرایی کاربرد فراوان دارد.
در پست آموزشی ارث بری در کلاسها، متوجه شدید که میتوانیم یک کلاس والد تعریف کرده و اعضا مشترک چندین کلاس را درون آن بنویسیم، درنتجه دیگر اعضا مشترک داخل کلاسهای فرزند تعریف نشده و در کلاس والد وجود دارند.
الف) کاربرد در متد سازنده
همانطور که میدانید اعضا یک کلاس میتواند هر چیزی باشد، اما اگر پراپرتی باشد چه؟
فرض کنید یک کلاس فرزند به نام 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 درون پراپرتیهای خود درج شده و اطلاعات شئ جدید از کلاس فرزند درون دیتابیس ذخیره میشود.
ب) کاربرد درون متدهای داخل کلاس فرزند
درصورتی که بخواهید از اعضا داخل کلاس والد یعنی Person درون متدهای نوشته شده در کلاس فرزند یعنی Student استفاده کنید، قطعا باید برای سیستم مشخص کنید که این اعضا درون کلاس فرزند نبوده و داخل کلاس والد قرار دارند و کامپایلر باید از آن کلاس ابتدا عملیات فراخوانی اعضا را انجام دهد.
به همین منظور میتوانید قبل از نام شناسه اعضا داخل کلاس والد، کلمه کلیدی base را درج کنید.
به عنوان مثال فرض کنید یک متد درون کلاس والد به نام Print1 تعریف کردهاید و حالا میخواهید آن متد را درون یک متد از کلاس فرزند به نام Print2 فراخوانی کنید؛ به همین منظور باید به شکل زیر عمل کنید:
public void Print2()
{
Console.WriteLine("محتوا دلخواه من");
base.Print1();
}
همانطور که مشاهده نمودید، متد Print2 درون کلاس فرزند یعنی کلاس Student نوشته شده و متد Print1 را که درون کلاس والد تعریف شده، با استفاده از کلمه کلیدی base فراخوانی کردیم.
جهت شرکت در دورههای زبان برنامه نویسی سیشارپ، از کد تخفیف heplc30 استفاده کنید.