學習軌道
/
C#
C#
/
練習
/
Jedlik 的玩具
Jedlik 的玩具

Jedlik 的玩具

學習練習

簡介

類別

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;
    }
}

說明

在這個練習裡,你會動手玩一台遙控車,那是你終於存夠錢才買下的。

遙控車一開始的電量是滿的(100%)。每次你用遙控器駕駛這台車,它就會前進 20 公尺,並消耗掉百分之一的電量。

這台遙控車有個炫麗的 LED 顯示器,會顯示兩項資訊:

  • 總共行駛的距離,顯示為:"Driven <METERS> meters"。
  • 剩餘的電量,顯示為:"Battery at <PERCENTAGE>%"。

如果電量降到 0%,你就不能再駕駛這台車,而電量顯示器會顯示 "Battery empty"。

你有六個任務,每個任務都會操作遙控車的實例。

1. 買一台全新的遙控車

實作(static)RemoteControlCar.Buy()方法,回傳一台全新的遙控車實例:

RemoteControlCar car = RemoteControlCar.Buy();

2. 顯示行駛的距離

實作RemoteControlCar.DistanceDisplay()方法,回傳 LED 顯示器上顯示的距離:

var car = RemoteControlCar.Buy();
car.DistanceDisplay();
// => "Driven 0 meters"

3. 顯示電量百分比

實作RemoteControlCar.BatteryDisplay()方法,回傳 LED 顯示器上顯示的電量百分比:

var car = RemoteControlCar.Buy();
car.BatteryDisplay();
// => "Battery at 100%"

4. 駕駛時更新行駛的公尺數

實作RemoteControlCar.Drive()方法,更新行駛的公尺數:

var car = RemoteControlCar.Buy();
car.Drive();
car.Drive();
car.DistanceDisplay();
// => "Driven 40 meters"

5. 駕駛時更新電量百分比

更新RemoteControlCar.Drive()方法,讓它更新電量百分比:

var car = RemoteControlCar.Buy();
car.Drive();
car.Drive();
car.BatteryDisplay();
// => "Battery at 98%"

6. 電量耗盡時避免繼續駕駛

更新RemoteControlCar.Drive()方法,讓它在電量耗盡(0%)時既不增加行駛距離,也不減少電量百分比:

var car = RemoteControlCar.Buy();

// Drain the battery
// ...

car.DistanceDisplay();
// => "Driven 2000 meters"

car.BatteryDisplay();
// => "Battery empty"
透過 GitHub 編輯 連結會在新視窗或分頁中開啟
C# Exercism

準備好開始 Jedlik 的玩具 了嗎?

註冊 Exercism,透過 62 個概念178 個練習 和真人引導來學習並精通 C#,全部免費。