轨道
/
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 米,并消耗 1% 的电量。

这辆遥控车有一个酷炫的 LED 显示屏,可以显示两项信息:

  • 它总共行驶的距离,显示为:"Driven <METERS> meters"。
  • 剩余电量,显示为:"Battery at <PERCENTAGE>%"。

如果电量为 0%,你就不能再驾驶这辆车了,电量显示屏会显示 "Battery empty"。

你有六个任务,每个任务都会用到遥控车实例。

1. 购买一辆全新的遥控车

实现(静态)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#,全部免费。