متدها
یک متد بهنام ring بنویسید که یک واژه بنویسد: ding. آن خطهای نوشتن را زیر static void ring() با پرانتز خالی بگذارید. داخل Main فقط ring(); بنویسید — نام، بعد پرانتز خالی، بعد نقطهویرگول. برنامه را اجرا کنید. صفحه باید یک خط نشان دهد: ding. Main خط WriteLine برای ding را نگه نمیدارد. متد نگه میدارد. همین جداسازی چیزی است که این صفحه آموزش میدهد. نام کلاس عمومی را Pine نگه دارید.
خطهایی که زیر ring زندگی میکنند
تا الان بیشتر کار نوشتن مستقیم داخل Main بود. آن هنوز کار میکند. یک متد به همان خطها نامی از خودشان میدهد. خطها را یکبار زیر آن نام مینویسید. سپس Main با نوشتن نام بهصورت فراخوانی آنها را میخواهد.
فایل Pine را باز کنید. نام کلاس Pine میماند. این صفحه نوع را عوض نام نمیکند. اگر هنوز foreach که plants یا slots را راه میرود آنجاست، پاکش کنید. اگر هنوز for شمردهشده با break یا continue مانده، پاکش کنید. هر خط ReadLine را هم پاک کنید. فایلی که نگه میدارید منتظر تایپ نیست و دموی حلقهٔ باقیمانده در Main ندارد.
بیرون از Main، هنوز داخل آکولادهای کلاس، static void ring() را با بدنهای مینویسید که Console.WriteLine("ding"); را اجرا میکند. برنامهٔ کامل در جعبهٔ بعدی است تا تمیز کپی کنید.
کلمهٔ static در این شکل مبتدی میماند تا Main بتواند ring را بدون ساختن شیء صدا بزند. کلمهٔ void یعنی این متد مقداری به فراخواننده برنمیگرداند — فقط بدنه را اجرا میکند. نام ring برچسبی است که در Main تایپ میکنید. پرانتز خالی () یعنی متد این صفحه مقداری به داخل نمیگیرد. آکولادها بدنه را نگه میدارند. پیش از اجرا فایل را ذخیره کنید.
فایلی که نگه میدارید
این برنامهٔ کوچک کامل برای این صفحه است. Main فقط فراخوانی را نگه میدارد. ring خط نوشتن را نگه میدارد. در این فایل نگهداشتنی شمارندهٔ ایندکس و راه رفتن آرایه نیست.
using System;
public class Pine
{
public static void Main()
{
ring();
}
static void ring()
{
Console.WriteLine("ding");
}
}
از بالا بخوانید. using System; نامهای کوتاه را آماده میکند. public class Pine نوع را نام میگذارد. public static void Main() جایی است که زمان اجرا شروع میکند. تنها دستور در Main برابر ring(); است. زیر Main، هنوز داخل کلاس، static void ring() مقدار Console.WriteLine("ding"); را نگه میدارد. روی صفحه یک خط: ding.
با dotnet run اجرا کنید. برنامه یک خط مینویسد و تمام میشود. منتظر نمیماند که شما چیزی تایپ کنید. اگر dotnet run منتظر ماند، هنوز ReadLine داخل فایل است. آن خط را پاک کنید و ring(); در Main بههمراه متد ring بالا را نگه دارید. صفحه ding را نشان میدهد. اگر صفحه leaf و mint نشان دهد، هنوز باقیماندهٔ foreach مینویسد. اگر صفحه حرفهای ring را نشان دهد، خط نوشتن دور همان کلمه گیومه دارد: Console.WriteLine("ring");. برای صفحهای که خط اشتباه نشان میدهد SDK داتنت را دوباره نصب نکنید.
یک اجرای کامل را به ترتیب راه بروید. C# از Main شروع میکند. تنها دستور در Main برابر ring(); است. آن فراخوانی به داخل متد ring میپرد. درون ring، WriteLine مقدار ding را مینویسد. سپس ring تمام میشود و در Main چیزی نمانده، پس برنامه تمام میشود. در این صفحه Console.WriteLine("ding"); را داخل Main نگذاشتید. زیر ring گذاشتید و با نام خواستیدش. اگر صفحه ding نشان دهد، فراخوانی به بدنه رسیده. اگر بعد از ساخت تمیز صفحه خالی بماند، Main هرگز ring را صدا نزده.
ring را مثل قفسهای برچسبدار برای خطهای نوشتن بدانید. Main لازم نیست آن خطها را تکرار کند. فقط به نام قفسه بهصورت فراخوانی نیاز دارد. برای همین یک Main کوتاه هنوز میتواند یک خط روشن روی صفحه بسازد: کار زیر نام متد زندگی میکند، و فراخوانی همان درخواست است. وقتی این الگو روشن شد، افزودن یک فراخوانی دیگر فقط یک درخواست دیگر به همان قفسهٔ خطهای نوشتن است.
ring را از Main بیش از یکبار صدا بزنید
فقط Main را عوض کنید تا همان متد را دو بار صدا بزند. خود متد ring را دست نزنید. بدنه هنوز برای هر فراخوانی یکبار ding مینویسد.
using System;
public class Pine
{
public static void Main()
{
ring();
ring();
}
static void ring()
{
Console.WriteLine("ding");
}
}
این فایل دوم است. فایل نگهداشتنی برای شکل یکفراخوانی نیست، ولی همان متد را آموزش میدهد. با dotnet run اجرا کنید. صفحه باید دو خط نشان دهد، هر کدام ding. فراخوانی اول بدنه را یکبار اجرا میکند. فراخوانی دوم همان بدنه را دوباره اجرا میکند. همین استفادهٔ دوباره دلیل نامگذاری خطهاست. WriteLine را بار دوم زیر ring کپی نکردید. یک فراخوانی دوم در Main نوشتید.
اگر فقط یک ring(); بگذارید، صفحه به یک ding برمیگردد. تعریف متد بهتنهایی چیزی نمینویسد. فقط فراخوانی از Main بدنه را اجرا میکند. فایلی که ring را تعریف کند ولی هرگز صدا نزند میتواند ساخته شود و هنگام اجرا هنوز صفحهٔ خالی نشان دهد. بعد از دیدن دو خط، اگر شکل ذخیرهای که میخواهید یک فراخوانی است، فایل نگهداشتنی یکفراخوانی را برگردانید: یک ring(); در Main.
قطعههای سرصفحهٔ متد
در این صفحه سرصفحه static void ring() است. از چپ به راست بخوانید. static اجازه میدهد Main در این شکل مبتدی متد را صدا بزند. void یعنی مقداری از راه فراخوانی برنمیگردد. ring نام است. () عمداً خالی است: این جلسه واژه یا عدد داخل متد نمیفرستد. صفحهٔ بعدی، parameters، نامها را داخل آن پرانتز میگذارد. صفحهٔ بعد از آن، return، وقتی به مقدار برگشتی نیاز دارید void را عوض میکند. هر دو را برای بعد بگذارید. امروز () خالی و void کافیاند.
📊 Header piece on this page
| Piece | On this page |
|---|---|
static |
Main can call ring without an object |
void |
ring does not hand a value back |
ring |
the name you type in the call |
() |
no values go in on this page |
{ ... } |
the body that writes ding |
فراخوانی در Main باید دقیقاً با نام جور باشد: ring(); با r کوچک، پرانتز خالی، و نقطهویرگول. نوشتن Ring(); با R بزرگ برای C# نام دیگری است. نوشتن ring بدون () در این شکل فراخوانی نیست. نوشتن Console.WriteLine("ring"); چهار حرف واژهٔ ring را مینویسد؛ بدنهٔ متد را اجرا نمیکند. وقتی میخواهید ding روی صفحه باشد، فراخوانی را ring(); نگه دارید.
باقیماندهٔ رایج یک راه رفتن قدیمی foreach روی plants است که هنوز کنار فراخوانی جدید در Main نشسته. آنوقت صفحه ممکن است leaf و mint، یا 2 و 4 و 6 نشان دهد بهجای ding — یا هر دو نوع خط مخلوط. Main را تا فراخوانیهای ring(); که این درس لازم دارد پاک کنید. اشتباه دیگر گذاشتن متد داخل آکولادهای Main است. متدهای این صفحه داخل کلاس، کنار Main مینشینند، نه تودرتو داخل Main.
foreach صفحهٔ قبلی مقدارهایی را راه میرفت که از قبل در آرایه ذخیره شده بودند. این صفحه آرایه راه نمیرود. یک متد void را نام میگذارد و صدا میزند. foreach (string plant in plants) را در همان Main نگذارید و تعجب نکنید چرا صفحه leaf نشان میدهد بهجای ding. Main نگهداشتنی این جلسه باید فقط فراخوانی ring(); را نگه دارد. بدنهٔ متد خط نوشتن برای ding را نگه میدارد.
حالا میتوانید static void ring() بنویسید، یک WriteLine داخل آکولادش بگذارید، و از Main با ring() صدا بزنید تا صفحه ding نشان دهد. دوبار صدا زدن بدون کپی بدنه دو بار ding مینویسد. پرانتز خالی و void عمداً در این صفحه میمانند. صفحهٔ بعدی parameters است؛ آنجا نامها داخل پرانتز میروند تا متد بتواند مقدارهایی را که از Main میفرستید استفاده کند.
صفحه همان بدنهٔ متد است
فایلی که نگه میدارید وقتی Main یک فراخوانی دارد یکبار ding مینویسد. نام ring در فراخوانی است، و حرفهای ring روی صفحه بهعنوان واژهٔ چاپشده نیستند مگر گیومه دورشان گذاشته باشید. () خالی هم روی سرصفحه و هم روی فراخوانی مینشیند. تودرتو کردن ring داخل Main شکل این درس نیست.
🧠 دانش خود را بیازمایید
دانش خود را بیازمایید
خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کردهاید
📝 دستورالعملها
- هر سوال را با دقت بخوانید
- بهترین پاسخ را برای هر سوال انتخاب کنید
- میتوانید آزمون را هر چند بار که میخواهید تکرار کنید
- پیشرفت شما در بالا نمایش داده میشود