در حال بارگذاری...

سازنده‌ها

کلاسی به‌نام Box با فیلد int به‌نام size و سازندهٔ Box(int n) بنویسید که size = n; بگذارد. در Pine، Main را نگه دارید و با Box b = new Box(4); یک box بسازید، بعد b.size را بنویسید. هر دو نوع را در همان فایل آموزشی نگه دارید تا dotnet run ساده بماند. با dotnet run اجرا کنید. صفحه باید یک خط نشان دهد: 4. عددی که به new می‌دهید به سازنده می‌رسد و سازنده قبل از ادامهٔ Main آن را روی شیء ذخیره می‌کند. گذاشتن فیلد هنگام ساخت — داخل سازنده — کار این صفحه است. نام کلاس عمومی شروع‌کننده را Pine نگه دارید.

متدی که وقتی new می‌سازد اجرا می‌شود

سازنده همان نام کلاس را دارد. نه void دارد و نه نوع برگشت دیگری. وقتی Main می‌نویسد new Box(4)، C# شیء را می‌سازد و آن سازنده را با 4 به‌عنوان n اجرا می‌کند. بعد از تمام شدن سازنده، متغیر شیء آماده‌شده را نگه می‌دارد. کار کامل این صفحه همین است: مقداری به new بدهید، بگذارید سازنده روی فیلد ذخیره کند، بعد فیلد را بنویسید تا ببینید ذخیره کار کرده.
فایل Pine را باز کنید. نام کلاس شروع‌کننده Pine می‌ماند. این صفحه شروع‌کننده را عوض نام نمی‌کند. اگر هنوز باقی‌ماندهٔ c.fill = 3; همهٔ چیزی است که در Main دارید، پاکش کنید. هر باقی‌ماندهٔ کلاس Cup را پاک کنید. هر خط ReadLine را هم پاک کنید. فایلی که نگه می‌دارید منتظر تایپ نیست.
بیرون از آکولادهای Pine — هنوز در همان فایل — بنویسید public class Box. داخل آکولادها اعلام کنید int size;. بعد سازنده را بنویسید: Box(int n) { size = n; }. روی این صفحه نام پارامتر را با size یکی نگذارید تا بدون واژهٔ this مقداردهی روشن بماند. در این صفحه داخل Box هیچ Main نیست. پیش از اجرا فایل را ذخیره کنید.
خط فیلد به‌تنهایی 4 را داخل شیء نمی‌گذارد. بدنهٔ سازنده وقتی new صدایش می‌زند آن کار را می‌کند. اگر سازنده را رد کنید و فقط فیلد را اعلام کنید، بعداً new Box(4) جور نمی‌شود و ساخت از فراخوانی شکایت می‌کند. هر دو قطعه را در Box نگه دارید: فیلد و سازنده‌ای که در آن می‌نویسد.

Box with constructor

csharp
using System;

public class Box
{
    int size;

    Box(int n)
    {
        size = n;
    }
}

Pine عدد 4 را به new Box می‌دهد

Pine مقدار public static void Main() را نگه می‌دارد. داخل Main بنویسید Box b = new Box(4); بعد Console.WriteLine(b.size);. آرگومان 4 به پارامتر سازندهٔ n می‌رود. روی این صفحه به خط جداگانهٔ b.size = 4; نیاز ندارید — سازنده قبلاً مقدار را ذخیره کرده. خط نوشتن هست تا بدون حدس به کار سازنده اعتماد کنید. در این صفحه c.fill = 3; نمی‌نویسید. آن درس فیلدها بود.

Pine builds one box

csharp
using System;

public class Pine
{
    public static void Main()
    {
        Box b = new Box(4);
        Console.WriteLine(b.size);
    }
}

public class Box
{
    int size;

    Box(int n)
    {
        size = n;
    }
}

فایل نگه‌داشتنی را از بالا بخوانید. using System; نام‌های کوتاه را آماده می‌کند. public class Pine شروع‌کننده است. public static void Main() جایی است که زمان‌اجرا شروع می‌کند. عبارت new Box(4) یک Box می‌سازد و Box(int n) را با n برابر 4 صدا می‌زند. بدنه می‌نویسد size = n، پس size آن شیء می‌شود 4. بعد Main می‌نویسد b.size و صفحه 4 نشان می‌دهد. چیز دیگری نباید چاپ شود.
با dotnet run اجرا کنید. برنامه یک خط می‌نویسد و می‌ایستد. منتظر تایپ شما نمی‌ماند. اگر dotnet run منتظر ماند، هنوز ReadLine در فایل است. آن خط را پاک کنید و در Pine همان new Box(4) به‌همراه نوشتن را نگه دارید، با سازنده در Box. صفحه 4 نشان می‌دهد. اگر صفحه 3 نشان داد، هنوز مسیر باقی‌ماندهٔ c.fill = 3; اجرا می‌شود. اگر صفحه ok نشان داد، ممکن است دموی قدیمی Chip هنوز در فایل باشد. برای صفحهٔ اشتباه SDK را دوباره نصب نمی‌کنید.
اگر new Box() بدون آرگومان بنویسید در حالی که تنها سازنده یک int می‌خواهد، ساخت رد می‌کند. فراخوانی را با فهرست پارامتر سازنده جور کنید. اگر قبل از نام سازنده void بگذارید، به یک متد معمولی تبدیل می‌شود نه سازنده، و new Box(4) آن بدنه را طوری که این صفحه انتظار دارد اجرا نمی‌کند. سرآیند باید شبیه Box(int n) باشد، نه void Box(int n)، و نه static int Box(int n).

مقایسه با مقداردهی بعد از new

در صفحهٔ فیلدها بعد از new Cup() می‌نوشتید c.fill = 3;. آن هنوز کار می‌کند. این صفحه ذخیره را به داخل سازنده می‌برد تا مقدار هنگام ساخت شیء گذاشته شود. دموی باقی‌ماندهٔ Cup با c.fill = 3; درس دیگری است. برای این صفحه Box و Pine و new Box(4) را نگه دارید. اگر Pine هنوز c.fill = 3; دارد و این فایل کلاس Cup ندارد، آن خط را بردارید. ساخت برای شما Cup اختراع نمی‌کند.
نوشتن فقط Console.WriteLine(b); یک 4 تمیز نشان نمی‌دهد. برای دیدن عدد ذخیره‌شده بنویسید Console.WriteLine(b.size);. خودِ ارجاع شیء مقدار فیلد نیست. آن الگو را در صفحهٔ فیلدها یاد گرفتید؛ اینجا هم وقتی کار سازنده را چک می‌کنید نگه دارید.
در برنامه‌های دیگر هنوز می‌توانید بعد از new به فیلد مقدار بدهید. این درس فقط مسیر سازنده را انتخاب می‌کند تا اولین مقدار مفید هنگام ساخت برسد. در دموی همین صفحهٔ Pine هر دو سبک را قاطی نکنید. یک مسیر روشن کافی است: آرگومان به new، ذخیره در سازنده، نوشتن فیلد.

دو box، دو size

هر new Box(...) دوباره سازنده را برای شیء جدا اجرا می‌کند. می‌توانید بنویسید Box a = new Box(2); و Box b = new Box(9);، بعد هر دو فیلد size را بنویسید. فراخوانی اول 2 را روی یک شیء ذخیره می‌کند. فراخوانی دوم 9 را روی شیء دیگر. دو شیء یک جایگاه size شریکند نیستند.

Pine builds two boxes

csharp
using System;

public class Pine
{
    public static void Main()
    {
        Box a = new Box(2);
        Box b = new Box(9);
        Console.WriteLine(a.size);
        Console.WriteLine(b.size);
    }
}

public class Box
{
    int size;

    Box(int n)
    {
        size = n;
    }
}

دوباره با dotnet run اجرا کنید. صفحه باید روی یک خط 2 و روی خط بعد 9 نشان دهد. هر فراخوانی سازنده آرگومان خودش را روی شیء خودش ذخیره کرد. نوشتن Box b = a; شیء دومی نمی‌سازد — وقتی دو size می‌خواهید دو فراخوانی new Box(...) بنویسید. کپی ارجاع همان دو بار صدا زدن سازنده نیست.
اگر هر دو خط همان عدد را نشان دادند، ببینید هر new آرگومان متفاوت می‌دهد و به ترتیب a.size و b.size می‌نویسید. اگر ساخت روی new دوم ایستاد، پرانتز جاافتاده یا نام کلاس اشتباه از شکل قدیمی را بجویید. غلط‌های کوچک در فراخوانی دوم وقتی خط اول را پیست می‌کنید و آرگومان را عوض نمی‌کنید رایج‌اند.

این صفحه برای this چه می‌گذارد

این صفحه با نام‌های متفاوت size = n; می‌نویسد. صفحهٔ بعدی — this — نشان می‌دهد وقتی نام‌ها برخورد می‌کنند چطور از فیلد خودِ شیء حرف بزنید. اینجا با نام روشن پارامتر n بمانید. روی این صفحه this.size اختراع نکنید مگر از قبل بلدش باشید؛ هدف درس فراخوانی سازنده از new است. واژهٔ this موضوع بعدی است، نه شرط ذخیرهٔ n در size امروز.
Box را داخل آکولادهای Pine تودرتو نکنید. در این صفحه دو کلاس هم‌سطح در فایل می‌نشینند. اگر ساخت نتوانست Box را پیدا کند، ببینید public class Box در همان فایل است. اگر صفحه 0 نشان داد، ممکن است سازنده مقداردهی نداشته باشد، یا Main هنوز شکلی بدون آرگومان داشته باشد که هرگز size را نمی‌گذارد — نگه دارید Box(int n) { size = n; } و new Box(4). صفر روی صفحه معمولاً یعنی فیلد در پیش‌فرض مانده چون ذخیره اجرا نشده.

می‌توانید اعلام کنید int size;، بنویسید Box(int n) { size = n; }، و از Pine.Main با Box b = new Box(4); بسازید. با dotnet run اجرا کنید. صفحه 4 نشان می‌دهد. سازنده وقتی new شیء را می‌سازد اجرا می‌شود. عدد را هنگام ساخت دادید، سازنده روی فیلد ذخیره کرد، و نوشتن ذخیره را ثابت کرد. سازنده را مثل آماده‌سازی ببینید که قبل از ادامهٔ Main بعد از new اجرا می‌شود. Pine همان دری است که با dotnet run باز می‌کنید. صفحهٔ بعد this است، جایی که راه دیگری برای نام‌بردن فیلدهای خودِ شیء داخل متدها و سازنده‌ها یاد می‌گیرید.
سرآیند سازنده را بدون void نگه دارید. آرگومان روی new را نگه دارید. نوشتن روی b.size را نگه دارید. این سه عادت ایست بازرسی این صفحه قبل از رفتن جلو است.

🧠 دانش خود را بیازمایید

آماده شروع

دانش خود را بیازمایید

خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کرده‌اید

❓
5
سوالات
🎯
70%
برای قبولی
♾️
∞
زمان
🔄
∞
تلاش‌ها

📝 دستورالعمل‌ها

  • هر سوال را با دقت بخوانید
  • بهترین پاسخ را برای هر سوال انتخاب کنید
  • می‌توانید آزمون را هر چند بار که می‌خواهید تکرار کنید
  • پیشرفت شما در بالا نمایش داده می‌شود