متد سازنده یا Constructor
نام دوره: زبان سی شارپ مقدماتی
نویسنده: علی مقدم جاه (مدرس دوره)
متد سازنده یا Constructor چیست؟
در پست آموزشی کلاس چیست، با مفهوم کلاس آشنا شدید.
برای استفاده از اجزاء نوشته شده درون کلاسها در برنامهمان، باید ابتدا یک شئ از آن کلاس در برنامه خود تعریف کنیم.
فرض کنید یک کلاس به نام Student داریم، که دارای چندین پراپرتی و یک متد Print است:
public class Student
{
public int StudentId { get; set; }
public string StudentName { get; set; }
public string StudentFamily { get; set; }
public override string ToString()
{
return string.Format($"Id: {StudentId}\tName: {StudentName}\tFamily : {StudentFamily}");
}
}
برای استفاده از این کلاس، همانطور که میدانید باید ابتدا یک شئ (نمونه) یا همان object از این کلاس در برنامه خود تعریف کنیم:
class Program
{
public static void Main(string[] args)
{
Student object1 = new Student();
}
}
همانطور که در مثال بالا مشاهده کردید، برای ایجاد یک شئ از کلاس Student، باید دستور زیر را در برنامه خود بنویسیم:
Student object1 = new Student();
در ابتدای این دستور، نام کلاس Student را مشاهده میکنید، برای اینکه هدف ما یعنی تعریف یک شئ از کلاس Student را به کامپایلر توضیح دهد.
اما در انتهای این خط، دستور ()Student را مشاهده میکنید.
همانطور که میدانید، در زبان برنامهنویسی سیشارپ، مقابل هر کلمهای که پرانتز مشاهده کردیم، باید بدانیم که آن یک متد است.
در نتیجه ()Student یک متد بوده که به آن متد سازنده یا همان constructor میگوییم.
این متد سازنده، وظیفه تولید یک شئ به نام object1 از کلاس Student را توسط کلمه new درون حافظه دارد.
در تمامی کلاسها، متد سازنده یا همان constructor بصورت پیش فرض وجود داشته که در وهله اول قابل مشاهده توسط ما نیست!
در کلاس زیر، شما اثری از متد سازنده نمیبینید:
public class Student
{
public int StudentId { get; set; }
public string StudentName { get; set; }
public string StudentFamily { get; set; }
public override string ToString()
{
return string.Format($"Id: {StudentId}\tName: {StudentName}\tFamily : {StudentFamily}");
}
}
اما در پشت پرده، در این کلاس بصورت زیر نوشته شده است:
public class Student
{
public int StudentId { get; set; }
public string StudentName { get; set; }
public string StudentFamily { get; set; }
public Student()
{
}
public override string ToString()
{
return string.Format($"Id: {StudentId}\tName: {StudentName}\tFamily : {StudentFamily}");
}
}
علت عدم نمایش این متد سازنده پیشفرض، این است که سیستم فکر میکند شما تنها از همین شکل متد سازنده میخواهید استفاده کنید.
یعنی یک متد سازنده بدون ورودی و بدون بدنه یا همان محدوده بلاک حاوی کد!
public Student()
{
}
اما اگر آن را بصورت دستی به شکل فوق بنویسید، یا با نوشتن کلمه ctor و زدن دوبار دکمه Tab که منجر به نوشتن اتوماتیک آن توسط سیستم میشود، میتوانید اقدام به ویرایش آن و یا حتی ایجاد Overloading های مختلف، یعنی مبحث متدهای چند ریختی برای متد سازنده خود کنید:
public class Student
{
public int StudentId { get; set; }
public string StudentName { get; set; }
public string StudentFamily { get; set; }
public Student()
{
}
public Student(int StudentId)
{
this.StudentId = StudentId;
}
public Student(int StudentId,string StudentName)
{
this.StudentId = StudentId;
this.StudentName = StudentName;
}
public Student(int StudentId, string StudentName, string StudentFamily)
{
this.StudentId = StudentId;
this.StudentName = StudentName;
this.StudentFamily = StudentFamily;
}
public override string ToString()
{
return string.Format($"Id: {StudentId}\tName: {StudentName}\tFamily : {StudentFamily}");
}
}
همانطور که در مثال فوق مشاهده میکنید، ما چندین شکل متفاوت از متد سازنده کلاس Student تعریف کردیم که در زمان تعریف یک شئ (نمونه) یا همان object از کلاس Student، میتوانیم طبق نیازمان هرکدام از آنها را با توجه به نوع ورودیای که در پرانتز برای آن مشخص میکنیم، فراخوانی کنیم:
class Program
{
public static void Main(string[] args)
{
Student object1 = new Student();
Student object2 = new Student(1);
Student object3 = new Student(1,"ali");
Student object4 = new Student(1, "ali","moghadam jah");
}
}
در این مثال، ما چهار شئ با نامهای object1 تا object4 را با متدهای سانده متفاوت تعریف کردیم.
جهت شرکت در دورههای زبان برنامه نویسی سیشارپ، از کد تخفیف heplc30 استفاده کنید.