سازهی اصلی شیءگرا در C#، کلاس است که ترکیبی از داده (فیلد) و رفتار (متد) است. به فیلدها و متدهای یک کلاس، اعضای آن میگویند.
دسترسی به اعضا را میتوان از طریق اصلاحکنندههای دسترسی محدود کرد که دو مورد رایجتر آنها عبارتند از:
public: هر کدی میتواند به این عضو دسترسی داشته باشد (بدون محدودیت).private: فقط کدی که در همان کلاس است میتواند به این عضو دسترسی داشته باشد.میتوانید به کلاس مانند قالبی برای ساختن نمونههایی از آن نگاه کنید. برای ساختن نمونهای از یک کلاس (که به آن شیء هم میگویند)، از کلیدواژهی new استفاده میشود:
class Car
{
}
// Create two car instances
var myCar = new Car();
var yourCar = new Car();
فیلدها یک نوع دارند و میتوان آنها را در هر جای کلاس تعریف کرد.
فیلدهای عمومی با PascalCase و فیلدهای خصوصی با camelCase و با پیشوند زیرخط _ تعریف میشوند:
class Car
{
// Accessible by anyone
public int Weight;
// Only accessible by code in this class
private string _color;
}
میتوان بهصورت اختیاری یک مقدار اولیه به فیلد اختصاص داد. اگر فیلدی مقدار اولیهای تعیین نکند، مقدار پیشفرض نوعش برای آن تنظیم میشود. میتوان به مقادیر فیلدهای یک نمونه با نشانهگذاری نقطهای دسترسی داشت و آنها را بهروزرسانی کرد.
class Car
{
// Will be set to specified value
public int Weight = 2500;
// Will be set to default value (0)
public int Year;
}
var newCar = new Car();
newCar.Weight; // => 2500
newCar.Year; // => 0
// Update value of the field
newCar.Year = 2018;
فیلدهای خصوصی معمولاً بهعنوان اثر جانبی فراخوانی یک متد بهروزرسانی میشوند. چنین متدهایی معمولاً مقداری برنمیگردانند که در این صورت نوع بازگشتی باید void باشد:
class CarImporter
{
private int _carsImported;
public void ImportCars(int numberOfCars)
{
// Update private field from public method
_carsImported = _carsImported + numberOfCars;
}
}
در این تمرین با یک ماشین کنترل از راه دور سر و کار دارید که بالاخره پول کافی برای خریدنش را جمع کردهاید.
هر ماشین با باتری کاملاً پر (۱۰۰٪) شروع میکند. هر بار که ماشین را با کنترل از راه دور میرانید، ۲۰ متر را طی میکند و یک درصد از شارژ باتری کم میشود.
ماشین کنترل از راه دور یک نمایشگر LED شیک دارد که دو مورد را نشان میدهد:
"Driven <METERS> meters"."Battery at <PERCENTAGE>%".اگر شارژ باتری ۰٪ باشد، دیگر نمیتوانید ماشین را برانید و نمایشگر باتری "Battery empty" را نشان میدهد.
شش وظیفه دارید که هر کدام با نمونههایی از ماشین کنترل از راه دور کار میکنند.
متد (static) RemoteControlCar.Buy() را پیادهسازی کنید تا یک نمونهی کاملاً نو از ماشین کنترل از راه دور برگرداند:
RemoteControlCar car = RemoteControlCar.Buy();
متد RemoteControlCar.DistanceDisplay() را پیادهسازی کنید تا مسافت را همانطور که روی نمایشگر LED نمایش داده میشود برگرداند:
var car = RemoteControlCar.Buy();
car.DistanceDisplay();
// => "Driven 0 meters"
متد RemoteControlCar.BatteryDisplay() را پیادهسازی کنید تا درصد شارژ باتری را همانطور که روی نمایشگر LED نمایش داده میشود برگرداند:
var car = RemoteControlCar.Buy();
car.BatteryDisplay();
// => "Battery at 100%"
متد RemoteControlCar.Drive() را پیادهسازی کنید که تعداد مترهای طیشده را بهروزرسانی میکند:
var car = RemoteControlCar.Buy();
car.Drive();
car.Drive();
car.DistanceDisplay();
// => "Driven 40 meters"
متد RemoteControlCar.Drive() را بهروزرسانی کنید تا درصد شارژ باتری را بهروزرسانی کند:
var car = RemoteControlCar.Buy();
car.Drive();
car.Drive();
car.BatteryDisplay();
// => "Battery at 98%"
متد RemoteControlCar.Drive() را طوری بهروزرسانی کنید که وقتی باتری خالی (۰٪) است، نه مسافت طیشده افزایش یابد و نه درصد شارژ باتری کاهش یابد:
var car = RemoteControlCar.Buy();
// Drain the battery
// ...
car.DistanceDisplay();
// => "Driven 2000 meters"
car.BatteryDisplay();
// => "Battery empty"