C# زبانی با نوعدهی ایستا است، یعنی هر چیز در زمان کامپایل یک نوع دارد. به اختصاص دادن یک مقدار به یک اسم، تعریف متغیر میگویند. یک متغیر را میتوان یا با مشخص کردن صریح نوعش تعریف کرد، یا با اجازه دادن به کامپایلر C# که نوعش را بر اساس مقدار اختصاصیافته استنباط کند (که به آن استنباط نوع میگویند). بنابراین، دو تعریف متغیر زیر معادل هم هستند:
int explicitVar = 10; // Explicitly typed
var implicitVar = 10; // Implicitly typed
مقدار یک متغیر با عملگر = بهروزرسانی میشود. نوع یک متغیر پس از تعریف هرگز تغییر نمیکند.
var count = 1; // Assign initial value
count = 2; // Update to new value
// Compiler error when assigning different type
// count = false;
C# یک زبان شیءگرا است و همهی توابع باید در یک «کلاس» تعریف شوند. برای تعریف یک کلاس از کلیدواژهی class استفاده میشود. شیءها (یا نمونهها) با استفاده از کلیدواژهی new ساخته میشوند.
class Calculator
{
// ...
}
var calculator = new Calculator();
به تابعی که داخل یک کلاس قرار دارد، متد میگوییم. هر متد میتواند صفر یا چند پارامتر داشته باشد. نوع همهی پارامترها باید صریحاً مشخص شود، برای پارامترها استنباط نوع وجود ندارد. به همین ترتیب، نوع بازگشتی هم باید صریحاً مشخص شود. مقدارها با استفاده از کلیدواژهی return از متدها برگردانده میشوند. برای اینکه کد موجود در فایلهای دیگر بتواند یک متد را فراخوانی کند، باید اصلاحکنندهی دسترسی public را اضافه کنید.
class Calculator
{
public int Add(int x, int y)
{
return x + y;
}
}
متدها با نحوهی نگارش نقطه (.) روی یک نمونه فراخوانی میشوند؛ در این کار اسم متدی که میخواهید فراخوانی کنید را مشخص میکنید و برای هر یک از پارامترهای متد، آرگومان میفرستید. آرگومانها میتوانند بهصورت اختیاری اسم پارامتر متناظرشان را هم مشخص کنند.
var calculator = new Calculator();
var sum_v1 = calculator.Add(1, 2);
var sum_v2 = calculator.Add(x: 1, y: 2);
محدوده در C# بین دو کاراکتر { و } تعریف میشود.
C# از دو نوع کامنت پشتیبانی میکند. قبل از کامنتهای تکخطی // میآید و کامنتهای چندخطی بین /* و */ قرار میگیرند.
دوستدختر لوسین در راه خانه است و او هنوز شام سالگردشان را نپخته است!
در این تمرین، قرار است کدی بنویسید تا به لوسین کمک کنید از کتاب آشپزی محبوبش یک لازانیای عالی بپزد.
چهار کار دارید که همهشان به زمان صرفشده برای پخت لازانیا مربوط میشوند.
متد Lasagna.ExpectedMinutesInOven() را تعریف کنید که هیچ پارامتری نمیگیرد و برمیگرداند که لازانیا باید چند دقیقه در فر بماند. بر اساس کتاب آشپزی، زمان مورد انتظار پخت در فر 40 دقیقه است:
var lasagna = new Lasagna();
lasagna.ExpectedMinutesInOven();
// => 40
متد Lasagna.RemainingMinutesInOven() را تعریف کنید که تعداد دقیقههایی را که لازانیا تاکنون در فر بوده است به عنوان پارامتر میگیرد و بر اساس زمان مورد انتظار پخت در فر از کار قبلی، برمیگرداند که لازانیا باید چند دقیقهی دیگر در فر بماند.
var lasagna = new Lasagna();
lasagna.RemainingMinutesInOven(30);
// => 10
متد Lasagna.PreparationTimeInMinutes() را تعریف کنید که تعداد لایههایی را که به لازانیا اضافه کردهاید به عنوان پارامتر میگیرد و برمیگرداند که چند دقیقه صرف آمادهسازی لازانیا کردهاید، با این فرض که آمادهسازی هر لایه 2 دقیقه طول میکشد.
var lasagna = new Lasagna();
lasagna.PreparationTimeInMinutes(2);
// => 4
متد Lasagna.ElapsedTimeInMinutes() را تعریف کنید که دو پارامتر میگیرد: پارامتر اول تعداد لایههایی است که به لازانیا اضافه کردهاید و پارامتر دوم تعداد دقیقههایی است که لازانیا در فر بوده است. این تابع باید برمیگرداند که چند دقیقه روی پخت لازانیا کار کردهاید، که مجموع زمان آمادهسازی بر حسب دقیقه و زمانی است که لازانیا در این لحظه در فر گذرانده است.
var lasagna = new Lasagna();
lasagna.ElapsedTimeInMinutes(3, 20);
// => 26