کلاس و سازنده در #c
شناسه پست: 2083
بازدید: 900

کلمه “class” ریشه کلمه “classification” است. وقتی کلاس خود را ایجاد می کنیم ، به طور سیستماتیک، اطلاعات و رفتار را در داخل یک موجودیت معنا دار قرار میدهیم. ما از classification فقط در توسعه ترم افزار استفاده نمیکنیم بلکه از آن در زندگی واقعی خود نیز استفاده میکنیم. پس همانطور که آن در زندگی واقعی مهم است، در توسعه نرم افزار نیز اهمیت دارد. کلاسها از نوع reference data type ها هستند و اگر میخواهید که بیشتر در مورد data type ها یاد بگیرید میتوانید ماژول ما در مورد مبانی #c را مطالعه کنید.

این مقاله، سرفصلی از دوره آموزشی زیر میباشد:

اگر می خواهید محتویات کامل این دوره را ببینید ، می توانید بر روی لینک سطح متوسطه #C کلیک کنید.

برای دانلود سورس، میتوانید بر روی لینک سورس کلاسها و سازنده ها در #c کلیک کنید.

در این مقاله، ما در مورد موضوعات زیر صحبت میکنیم:

افزودن المنتهای جدید در Solution Explorer

اگرچه ما میتوانیم کلاسهای جدید را داخل فایل Program.cs ایجاد کنیم اما بهتر است که یک کلاس جدید را در یک فایل جداگانه ایجاد کنیم. برای این کار، ما باید بر روی نام پروژه، راست کلیک کنیم و Add و سپس زیر منوی New Item (Ctrl+Shift+A) را انتخاب کنیم:

افزودن آیتم جدید در ویژوال استودیو

سپس باید یک class file را انتخاب کنیم و به آن یک نام دهیم:

اضافه کردن کلاس در #c

تعریف کلاسها و نحوه استفاده از آنها

در #c، برای تعریف یک کلاس، ما باید از کلمه کلیدی class استفاده کنیم. class شامل member ها است. تمام member های class داخل بدنه class بین دو بریس باز و بسته تعریف میشوند:

ما میبینیم که بدنه کلاس، شامل دو فیلد private (متغیرها در بدنه کلاس، فیلد نامیده میشوند) _name و _lastName و یک متد public به نام GetFullName (اگر با access modifier ها آشنا نیستید:  private, public و غیره. میتوانید در مورد آنها در ماژول آموزشی ما در مورد مبانی #c بیشتر اطلاعات کسب نمایید) است.

از آنجایی که از ماژول 1 در مورد مبانی #c یاد گرفتیم، class یک reference type است، بنابراین برای initialize کردن آن، باید از کلمه کلیدی new استفاده کنیم:

حالا آبجکت student میتواند به member های کلاس Student دسترسی داشته باشد. در حال حاضر، ما فقط یک متد داخل کلاس Student داریم و میتوانیم آن را با سینتکس ()student.GetFullName فراخوانی کنیم. این متد یک رشته خالی برمیگرداند. اما ما به محض معرفی سازنده ها، می خواهیم این مسئله را برطرف کنیم.

خیلی مهم است که اصطلاحات class و object را با هم اشتباه نگیرید. class تعریفی از یک type است اما یک object نمونه ای از آن type است. به عبارتی ما میتوانیم چند نمونه object از یک class داشته باشیم:

سازنده ها

زمانیکه ما از کلمه کلیدی new برای ایجاد یک آبجکت استفاده میکنیم، CLR (Common Language Runtime) از تعریف class، با فراخوانی یک متد سازنده برای ایجاد آبجکت مورد نظر استفاده میکند.

سازنده یک متد خاص است که نام آن با نام کلاسی که در آن تعریف شده است یکی میباشد. این متد هیچ مقداری برنمیگرداند (حتی void) و میتواند پارامترهای ورودی داشته باشد. وقتی ما یک نمونه از یک کلاس را ایجاد میکنیم آن متد سازنده به طور خودکار اجرا میشود. بنابراین هرزمان که ما از کلمه کلیدی new برای نمونه سازی یک کلاس استفاده میکنیم، در واقع داریم سازنده آن کلاس را فراخوانی میکنیم.

هر کلاس باید یک سازنده داشته باشد. اگر ما هیچ سازنده ای را برای آن ننویسیم، سپس کامپایلر به طور خودکار، یک سازنده را برای ما generate میکند. این نوع سازنده، یک default constructor (سازنده پیشفرض) نامیده میشود. یک سازنده پیش فرض، تمام داده های یک کلاس را به مقادیر پیش فرض خودشان ست میکند (اگر مقادیر را به آنها اختصاص ندهیم، مقادیر پیش فرض به آنها اختصاص داده میشوند). بنابراین با این حساب در مثال ما، فیلدهای _name و _lastName دارای یک رشته خالی در ابتدا میباشند.

ما سازنده پیشفرض خودمان را نیز میتوانیم بنویسیم:

Constructor Overloading

کلاسهای ما فقط به داشتن یک متد سازنده محدود نمیشوند. ما میتوانیم بیشتر از یک متد سازنده در کلاسمان داشته باشیم:

حالا اینجا ما دو گزینه برای نمونه سازی کلاسمان در اختیار داریم. اولین گزینه با مقادیر پیش فرض (که ما نباید مقادری را برایش بنویسیم) و گزینه دوم متد overloade شده که این اجازه را به ما میدهد که خودمان مقادیر مورد دلخواه خود را برای فیلدها تعیین کنیم:

یک نکته مهم را باید در ذهن خود بسپارید. اگر ما متد سازنده خودمان را ایجاد کنیم، سپس کامپایلر یک متد پیشفرض برای ما ایجاد نمیکند. بنابراین اگر میخواهیم که حتما یک متد سازنده پیشفرض نیز داشته باشیم باید هر دوی آنها (هم متد سازنده پیشفرض و هم متد سازنده مدنظر خودمان) را ایجاد کنیم.

کلاسهای Partial

در یک پروژه واقعی، کلاسهای ما میتواند خیلی بزرگ با تعداد زیادی خطوط کد باشد. این نوع از کلاسها میتوانند قابلیت خوانایی کمتری داشته باشند و همچنین نگهداری آنها نیز دشوار باشد. برای اجتناب از این مشکل، ما از کلاسهای partial استفاده میکنیم. کلاسهای partial حتی مزیتهای بیشتر از این دارند، چرا که چند توسعه دهنده میتوانند در آن واحد بر روی یک کلاس کار کنند. علاوه بر این، ما یک partial نیز داخل آن کلاسها میتوانیم تعریف نماییم.

یک کلاس partial چیزی بیش از یک قسمتی از یک کلاس نیست. برای تعریف کلاسهای partial، ما باید از کلمه کلیدی partial در هر کلاس استفاده کنیم:

نتیجه گیری

در این مقاله ما یاد گرفتیم که:

  • کلاسها چه چیزهایی هستند و چطور باید از آنها استفاده کنیم.
  • چطور از سازنده ها استفاده کنیم و چطور آنها را overload کنیم.
  • چطور از کلاسهای partial استفاده کنیم و چرا آنها مفید هستند.

در مقاله بعدی، ما در مورد ویژگیها در #c صحبت میکنیم.

نویسنده

امید عباسی
من امید عباسی هستم. سالهاست که در زمینه برنامه نویسی با تکنولوژی دات نت فعالیت میکنم و عاشق این هستم که تجربیات و دانش خودم را در این زمینه با دیگران به اشتراک بزارم. خیلی دوست دارم که نظر و انتقاد خودتون رو در مورد این نوشته برای من بنویسید تا بتونم در آینده، مطالب بهتر و ارزشمندتری را برای شما فراهم کنم. در صورت داشتن هرگونه سوال هم در قسمت دیدگاه ها میتونید با بنده در ارتباط باشید