متدهای نمونه
کلاسی بهنام Jar با فیلد int بهنام fill، سازندهٔ Jar(int n) که fill = n; میگذارد، و متد نمونهٔ void bump() که fill = fill + 1; اجرا میکند بنویسید. در Pine، Main را نگه دارید و با Jar j = new Jar(3); یک jar بسازید، صدا بزنید j.bump();، بعد j.fill را بنویسید. هر دو نوع را در همان فایل آموزشی نگه دارید تا dotnet run ساده بماند. با dotnet run اجرا کنید. صفحه باید یک خط نشان دهد: 4. متد روی همان یک شیء اجرا میشود و فیلدش را عوض میکند. صدا زدن متد از راه متغیر شیء کار این صفحه است. نام کلاس عمومی شروعکننده را Pine نگه دارید.
متدی که مال شیء است
در صفحات متدهای قبلی از Main بدون شیء جلوی نام صدا میزدید. اینجا متد روی کلاس مینشیند، ولی از راه متغیر jar به آن میرسید: j.bump(). آن فراخوانی از فیلدهای همان jar که j نام میبرد استفاده میکند. jar دوم fill خودش را نگه میدارد.
فایل Pine را باز کنید. نام کلاس شروعکننده Pine میماند. این صفحه شروعکننده را عوض نام نمیکند. اگر هنوز باقیماندهٔ Tin t = new Tin(7); همهٔ چیزی است که در Main دارید، پاکش کنید. هر باقیماندهٔ کلاس Tin را پاک کنید. هر خط ReadLine را هم پاک کنید. فایلی که نگه میدارید منتظر تایپ نیست.
بیرون از آکولادهای Pine — هنوز در همان فایل — بنویسید public class Jar. داخل آکولادها اعلام کنید int fill;. سازنده را بنویسید Jar(int n) { fill = n; } با نامهای متفاوت تا این صفحه به this نیاز نداشته باشد. بعد متد نمونه را بنویسید: void bump() { fill = fill + 1; }. در این صفحه داخل Jar هیچ Main نیست. پیش از اجرا فایل را ذخیره کنید.
سرآیند متد به void نیاز دارد چون bump مقداری برای نوشتن برنمیگرداند. سازنده هنوز void ندارد — آن تفاوت را روشن نگه دارید.
using System;
public class Jar
{
int fill;
Jar(int n)
{
fill = n;
}
void bump()
{
fill = fill + 1;
}
}
Pine یک jar میسازد و bump را صدا میزند
Pine مقدار public static void Main() را نگه میدارد. داخل Main سه خط به ترتیب بنویسید: Jar j = new Jar(3);، بعد j.bump();، بعد Console.WriteLine(j.fill);. سازنده 3 را ذخیره میکند. فراخوانی j.bump() یکی اضافه میکند. نوشتن مقدار تازه را نشان میدهد. در این صفحه Tin t = new Tin(7); نمینویسید. آن درس this بود.
using System;
public class Pine
{
public static void Main()
{
Jar j = new Jar(3);
j.bump();
Console.WriteLine(j.fill);
}
}
public class Jar
{
int fill;
Jar(int n)
{
fill = n;
}
void bump()
{
fill = fill + 1;
}
}
فایل نگهداشتنی را از بالا بخوانید. using System; نامهای کوتاه را آماده میکند. public class Pine شروعکننده است. public static void Main() جایی است که زماناجرا شروع میکند. عبارت new Jar(3) یک jar میسازد و 3 را در fill میگذارد. فراخوانی j.bump() وارد bump روی همان شیء میشود. بدنه مینویسد fill = fill + 1، پس fill میشود 4. بعد Main مینویسد j.fill و صفحه 4 نشان میدهد.
با dotnet run اجرا کنید. برنامه یک خط مینویسد و میایستد. منتظر تایپ شما نمیماند. اگر dotnet run منتظر ماند، هنوز ReadLine در فایل است. آن خط را پاک کنید و در Pine همان new Jar(3)، j.bump() و نوشتن را نگه دارید، با bump در Jar. صفحه 4 نشان میدهد. اگر صفحه 7 نشان داد، هنوز دموی باقیماندهٔ Tin اجرا میشود. اگر صفحه 3 نشان داد، ممکن است فراخوانی bump نباشد یا بعد از نوشتن اجرا شود.
اگر بدون j. جلوی آن بنویسید bump();، ساخت در این شکل Main رد میکند. متد نمونه به شیء نیاز دارد. اگر مثل فراخوانی static بنویسید Jar.bump();، آن ایدهٔ درس بعد است — نه این صفحه. نگه دارید j.bump();.
مقایسه با this و مقداردهی سادهٔ فیلد
در صفحهٔ this داخل سازنده با نامهای همخوان فیلد ذخیره میکردید. آن هنوز کار میکند. این صفحه متدی اضافه میکند که بعد از وجود شیء میتوانید صدا بزنید. باقیماندهٔ Tin t = new Tin(7); با this.size = size; درس دیگری است. برای این صفحه Jar و Pine و j.bump(); را نگه دارید.
هنوز میتوانستید در Main بنویسید j.fill = j.fill + 1;. این درس آن تغییر را به داخل bump میبرد تا شیء عمل را حمل کند. نوشتن فقط Console.WriteLine(j); یک 4 تمیز نشان نمیدهد. برای دیدن عدد ذخیرهشده بنویسید Console.WriteLine(j.fill);.
دو bump روی یک jar
میتوانید قبل از نوشتن دو بار j.bump(); صدا بزنید. با new Jar(3) شروع کنید، یک bump به 4، bump دوم به 5، بعد بنویسید. آن چک در یک دموی کوچک دوم Pine جا میشود.
using System;
public class Pine
{
public static void Main()
{
Jar j = new Jar(3);
j.bump();
j.bump();
Console.WriteLine(j.fill);
}
}
public class Jar
{
int fill;
Jar(int n)
{
fill = n;
}
void bump()
{
fill = fill + 1;
}
}
دوباره با dotnet run اجرا کنید. صفحه باید 5 نشان دهد. هر فراخوانی bump روی همان شیء اجرا شد و یکی دیگر اضافه کرد. نوشتن Jar k = j; شیء دومی نمیسازد — وقتی دو fill جدا میخواهید دو new Jar(...) بنویسید. برای این صفحه دو bump روی یک jar کافی است تا ببینید متد دو بار اجرا میشود.
اگر صفحه هنوز 3 نشان داد، ممکن است فراخوانیهای bump نباشند یا Main هنوز قبل از صدا زدن بنویسد. اگر 7 یا عدد باقیماندهٔ دیگری نشان داد، ممکن است دموی قدیمی Tin هنوز در فایل باشد. نگه دارید new Jar(3) و فراخوانیهای bump.
این صفحه برای static چه میگذارد
این صفحه متد را از راه شیء صدا میزند: j.bump(). صفحهٔ بعدی — static — متدها و فیلدهایی را نشان میدهد که مال خودِ نام کلاساند بدون شیء جلوی نام. اینجا با فراخوانی نمونه بمانید. روی این صفحه static void bump() اختراع نکنید مگر از قبل بلدش باشید؛ هدف درس فراخوانی روی شیء است.
Jar را داخل آکولادهای Pine تودرتو نکنید. در این صفحه دو کلاس همسطح در فایل مینشینند. اگر ساخت نتوانست Jar را پیدا کند، ببینید public class Jar در همان فایل است. اگر صفحه 0 نشان داد، ممکن است سازنده ذخیره نداشته باشد یا bump هرگز اجرا نشود — نگه دارید Jar(int n) { fill = n; } و قبل از نوشتن j.bump();.
میتوانید اعلام کنید int fill;، بنویسید Jar(int n) { fill = n; } و void bump() { fill = fill + 1; }، و از Pine.Main اجرا کنید Jar j = new Jar(3);، j.bump();، بعد بنویسید j.fill. با dotnet run اجرا کنید. صفحه 4 نشان میدهد. متد نمونه روی آن شیء اجرا شد و فیلدش را عوض کرد. bump را مثل عملی ببینید که jar بعد از وجود میتواند انجام دهد. Pine همان دری است که با dotnet run باز میکنید. صفحهٔ بعد static است، جایی که بعضی اعضا مال نام کلاساند بدون نیاز به متغیر شیء جلوی نام.
void را روی متد نگه دارید، نه روی سازنده. شیء را قبل از فراخوانی نگه دارید: j.bump();. نوشتن روی j.fill را نگه دارید. این سه عادت ایست بازرسی این صفحه قبل از رفتن جلو است.
🧠 دانش خود را بیازمایید
دانش خود را بیازمایید
خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کردهاید
📝 دستورالعملها
- هر سوال را با دقت بخوانید
- بهترین پاسخ را برای هر سوال انتخاب کنید
- میتوانید آزمون را هر چند بار که میخواهید تکرار کنید
- پیشرفت شما در بالا نمایش داده میشود