this
کلاسی بهنام Tin با فیلد int بهنام size و سازندهٔ Tin(int size) بنویسید که this.size = size; بگذارد. در Pine، Main را نگه دارید و با Tin t = new Tin(7); یک tin بسازید، بعد t.size را بنویسید. هر دو نوع را در همان فایل آموزشی نگه دارید تا dotnet run ساده بماند. با dotnet run اجرا کنید. صفحه باید یک خط نشان دهد: 7. پارامتر و فیلد نام size را شریکند. واژهٔ this فیلد روی شیء را نام میبرد تا ذخیره به جای درست برسد. استفاده از this وقتی نامها برخورد میکنند کار این صفحه است. نام کلاس عمومی شروعکننده را Pine نگه دارید.
چرا نام یکسان به this نیاز دارد
در صفحهٔ سازندهها پارامتر n بود و فیلد size، پس size = n; روشن بود. اینجا هر دو نام sizeاند. داخل سازنده، size لخت یعنی پارامتر. نوشتن size = size; پارامتر را روی خودش کپی میکند و فیلد را در پیشفرض میگذارد. فیلد روی شیء هنوز نیاز به نوشتن دارد. آن نوشتن سمت چپ this.size را میگذارد.
فایل Pine را باز کنید. نام کلاس شروعکننده Pine میماند. این صفحه شروعکننده را عوض نام نمیکند. اگر هنوز باقیماندهٔ Box b = new Box(4); همهٔ چیزی است که در Main دارید، پاکش کنید. هر باقیماندهٔ کلاس Box را پاک کنید. هر خط ReadLine را هم پاک کنید. فایلی که نگه میدارید منتظر تایپ نیست.
بیرون از آکولادهای Pine — هنوز در همان فایل — بنویسید public class Tin. داخل آکولادها اعلام کنید int size;. بعد سازنده را بنویسید: Tin(int size) { this.size = size; }. در این صفحه داخل Tin هیچ Main نیست. پیش از اجرا فایل را ذخیره کنید.
مقداردهی را یکبار دیگر بخوانید. سمت راست size مقداری است که در پارامتر رسیده — اینجا 7. سمت چپ this.size فیلد روی شیء در حال ساخت است. بعد از اجرای خط، size آن شیء مقدار 7 دارد. اگر this. را بردارید و size = size; نگه دارید، بعداً صفحه 0 نشان میدهد چون فیلد عوض نشده.
using System;
public class Tin
{
int size;
Tin(int size)
{
this.size = size;
}
}
Pine یک tin میسازد
Pine مقدار public static void Main() را نگه میدارد. داخل Main بنویسید Tin t = new Tin(7); بعد Console.WriteLine(t.size);. آرگومان 7 پارامتر سازندهٔ size میشود. سازنده با this.size = size; ذخیره میکند. روی این صفحه به خط جداگانهٔ t.size = 7; نیاز ندارید. در این صفحه Box b = new Box(4); نمینویسید. آن درس سازندهها بود.
using System;
public class Pine
{
public static void Main()
{
Tin t = new Tin(7);
Console.WriteLine(t.size);
}
}
public class Tin
{
int size;
Tin(int size)
{
this.size = size;
}
}
فایل نگهداشتنی را از بالا بخوانید. using System; نامهای کوتاه را آماده میکند. public class Pine شروعکننده است. public static void Main() جایی است که زماناجرا شروع میکند. عبارت new Tin(7) یک Tin میسازد و Tin(int size) را با پارامتر برابر 7 صدا میزند. بدنه مینویسد this.size = size، پس فیلد شیء میشود 7. بعد Main مینویسد t.size و صفحه 7 نشان میدهد.
با dotnet run اجرا کنید. برنامه یک خط مینویسد و میایستد. منتظر تایپ شما نمیماند. اگر dotnet run منتظر ماند، هنوز ReadLine در فایل است. آن خط را پاک کنید و در Pine همان new Tin(7) بههمراه نوشتن را نگه دارید، با this.size = size; در Tin. صفحه 7 نشان میدهد. اگر صفحه 4 نشان داد، هنوز مسیر باقیماندهٔ new Box(4) اجرا میشود. اگر صفحه 0 نشان داد، بدنهٔ سازنده احتمالاً size = size; بدون this. است — this. را به سمت چپ برگردانید.
اگر قبل از نام سازنده void بگذارید، به متد معمولی تبدیل میشود نه سازنده، و new Tin(7) آن بدنه را طوری که این صفحه انتظار دارد اجرا نمیکند. سرآیند باید شبیه Tin(int size) باشد، نه void Tin(int size).
this.size و size کنار هم
یک جدول کوتاه دو نام را وقتی داخل سازندهاید روشن نگه میدارد.
📊 this.size vs size
| Name | What it means in Tin(int size) |
|---|---|
size alone |
the parameter that entered the constructor |
this.size |
the field on the object being built |
this.size = size; |
store the parameter into the field |
size = size; |
does not update the field |
جدول فقط یادآوری است. خط تایپشدهای که نگه میدارید داخل سازنده this.size = size; است، بعد در Pine مقدار Tin t = new Tin(7); و Console.WriteLine(t.size);. |
مقایسه با صفحهٔ سازندهها
در صفحهٔ سازندهها، Box(int n) { size = n; } کار میکرد چون n و size واژههای متفاوت بودند. آن شکل هنوز کار میکند. این صفحه عمداً همان واژه را دو بار به کار میبرد تا به this نیاز داشته باشید. دموی باقیماندهٔ Box با size = n; درس دیگری است. برای این صفحه Tin و Pine و this.size = size; را نگه دارید.
نوشتن فقط Console.WriteLine(t); یک 7 تمیز نشان نمیدهد. برای دیدن عدد ذخیرهشده بنویسید Console.WriteLine(t.size);. خودِ ارجاع شیء مقدار فیلد نیست.
در روزهای دیگر هنوز میتوانید نام پارامتر دیگری انتخاب کنید. این درس عمداً نامهای همخوان را انتخاب میکند. در دموی همین صفحهٔ Tin مقدار n و this را قاطی نکنید. یک مسیر روشن کافی است: نامهای همخوان، this روی فیلد، نوشتن فیلد.
دو tin همچنان جدا میمانند
هر new Tin(...) دوباره سازنده را برای شیء جدا اجرا میکند. میتوانید بنویسید Tin a = new Tin(2); و Tin b = new Tin(9);، بعد هر دو فیلد size را بنویسید. هر فراخوانی روی شیء خودش this.size = size; میگذارد. دو شیء یک جایگاه size شریکند نیستند. برای آن چک به جعبهٔ کد دوم نیاز ندارید — وقتی 7 را دیدید اعداد را در Pine عوض کنید، یا دموی تکtin را بهعنوان فایل ذخیرهشده نگه دارید.
اگر هر دو خط 0 نشان دادند، سازنده هنوز روی سمت چپ this ندارد. اگر ساخت نتوانست Tin را پیدا کند، ببینید public class Tin در همان فایل است.
این صفحه برای متدهای نمونه چه میگذارد
این صفحه this را فقط داخل سازنده برای ذخیرهٔ فیلد به کار میبرد. صفحهٔ بعدی — متدهای نمونه — متدهایی را نشان میدهد که روی یک شیء اجرا میشوند و میتوانند فیلدها را بخوانند یا عوض کنند. اینجا با ذخیره در سازنده بمانید. برای این درس روی Tin متد اضافی اختراع نکنید مگر از قبل بلدش باشید؛ هدف درس this.size = size وقتی نامها یکیاند است.
Tin را داخل آکولادهای Pine تودرتو نکنید. در این صفحه دو کلاس همسطح در فایل مینشینند. اگر Pine هنوز از دموی سازندهها Box b = new Box(4); دارد و این فایل کلاس Box همخوانی که بخواهید نگه دارید ندارد، آن خط را بردارید. نگه دارید Tin t = new Tin(7); و Console.WriteLine(t.size);. وقتی Tin درس میدهید ساخت برای شما Box اختراع نمیکند.
میتوانید اعلام کنید int size;، بنویسید Tin(int size) { this.size = size; }، و از Pine.Main با Tin t = new Tin(7); بسازید. با dotnet run اجرا کنید. صفحه 7 نشان میدهد. واژهٔ this فیلد شیء را نام میبرد وقتی پارامتر همان نام را دارد. عدد را هنگام ساخت دادید، سازنده با this ذخیره کرد، و نوشتن ذخیره را ثابت کرد. this را مثل اشارهگر به شیء در حال ساخت ببینید وقتی نام لخت بهجای آن پارامتر را معنی میکند. Pine همان دری است که با dotnet run باز میکنید. صفحهٔ بعد متدهای نمونه است، جایی که متدهای روی شیء بعد از وجود شیء از فیلدها استفاده میکنند.
سرآیند سازنده را بدون void نگه دارید. this. را روی فیلد نگه دارید. نوشتن روی t.size را نگه دارید. این سه عادت ایست بازرسی این صفحه قبل از رفتن جلو است.
🧠 دانش خود را بیازمایید
دانش خود را بیازمایید
خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کردهاید
📝 دستورالعملها
- هر سوال را با دقت بخوانید
- بهترین پاسخ را برای هر سوال انتخاب کنید
- میتوانید آزمون را هر چند بار که میخواهید تکرار کنید
- پیشرفت شما در بالا نمایش داده میشود