ساختن یک نمونه از یک کلاس با فراخوانی _سازنده_ی آن از طریق عملگر new انجام میشود. سازنده نوع خاصی از متد است که هدفش مقداردهی اولیه به نمونهای است که تازه ساخته شده. سازندهها شبیه متدهای معمولی هستند، اما نوع بازگشتی ندارند و اسمشان با اسم کلاس یکی است.
class Library
{
private int books;
public Library()
{
// Initialize the books field
this.books = 10;
}
}
// This will call the constructor
var library = new Library();
سازندهها هم مانند متدهای معمولی میتوانند پارامتر داشته باشند. پارامترهای سازنده معمولاً بهصورت فیلدهای (خصوصی) ذخیره میشوند تا بعداً به آنها دسترسی داشته باشیم، یا در یک محاسبهی یکباره به کار میروند. آرگومانها را میتوان به سازندهها پاس داد، درست مثل پاس دادن آرگومانها به متدهای معمولی.
class Building
{
private int numberOfStories;
private int totalHeight;
public Building(int numberOfStories, double storyHeight)
{
this.numberOfStories = numberOfStories;
this.totalHeight = numberOfStories * storyHeight;
}
}
// Call a constructor with two arguments
var largeBuilding = new Building(55, 6.2)
در این تمرین، مسابقههایی بین انواع مختلف خودروهای کنترل از راه دور ترتیب میدهید. هر خودرو سرعت و مصرف باتری مخصوص به خود را دارد.
خودروها با باتری کاملاً پر (۱۰۰٪) شروع میکنند. هر بار که خودرو را با کنترل از راه دور میرانید، به اندازهی سرعت خودرو متر طی میکند و درصد باتری باقیمانده را به اندازهی مصرف باتریاش کاهش میدهد.
اگر باتری خودرو کمتر از درصد مصرف باتریاش باشد، دیگر نمیتوانید خودرو را برانید.
هر پیست مسابقه مسافت مخصوص به خود را دارد. خودروها با بررسی این موضوع آزمایش میشوند که آیا میتوانند بدون تمام شدن باتری، پیست را به پایان برسانند.
شش وظیفه دارید که هر کدام با نمونههایی از خودروی کنترل از راه دور سر و کار دارند.
با تعریف یک سازنده برای کلاس RemoteControlCar امکان ساخت خودروی کنترل از راه دور را فراهم کنید؛ این سازنده سرعت خودرو بر حسب متر و درصد مصرف باتری را به عنوان دو پارامتر خود میگیرد (هر دو از نوع int):
int speed = 5;
int batteryDrain = 2;
var car = new RemoteControlCar(speed, batteryDrain);
با تعریف یک سازنده برای کلاس RaceTrack امکان ساخت پیست مسابقه را فراهم کنید؛ این سازنده مسافت پیست بر حسب متر را به عنوان تنها پارامتر خود میگیرد (که از نوع int است):
int distance = 800;
var raceTrack = new RaceTrack(distance);
متد RemoteControlCar.Drive() را پیادهسازی کنید که تعداد مترهای طیشده را بر اساس سرعت خودرو بهروزرسانی میکند. همچنین متد RemoteControlCar.DistanceDriven() را پیادهسازی کنید تا تعداد مترهای طیشده توسط خودرو را برگرداند:
int speed = 5;
int batteryDrain = 2;
var car = new RemoteControlCar(speed, batteryDrain);
car.Drive();
car.DistanceDriven();
// => 5
متد RemoteControlCar.Drive() را بهروزرسانی کنید تا باتری را بر اساس مصرف باتری خودرو خالی کند. همچنین متد RemoteControlCar.BatteryDrained() را پیادهسازی کنید که نشان میدهد آیا باتری خالی شده است:
int speed = 5;
int batteryDrain = 2;
var car = new RemoteControlCar(speed, batteryDrain);
car.Drive();
car.BatteryDrained();
// => false
پرفروشترین خودروی کنترل از راه دور، Nitro است که حداکثر سرعت خیرهکنندهی ۵۰ متر با مصرف باتری ۴٪ دارد. متد (ایستا) RemoteControlCar.Nitro() را پیادهسازی کنید تا خودرویی از این نوع را برگرداند:
var car = RemoteControlCar.Nitro();
car.Drive();
car.DistanceDriven();
// => 50
برای تمام کردن یک پیست مسابقه، خودرو باید بتواند مسافت پیست را طی کند. یعنی پیش از عبور از خط پایان، باتریاش را خالی نکند. متد RaceTrack.TryFinishTrack() را پیادهسازی کنید که یک نمونهی RemoteControlCar را به عنوان پارامتر خود میگیرد و اگر خودرو بتواند پیست مسابقه را به پایان برساند true و در غیر این صورت false برمیگرداند:
int speed = 5;
int batteryDrain = 2;
var car = new RemoteControlCar(speed, batteryDrain);
int distance = 100;
var raceTrack = new RaceTrack(distance);
raceTrack.TryFinishTrack(car);
// => true