トラック
/
C#
C#
/
演習
/
リモコンの片付け
リモコンの片付け

リモコンの片付け

学習演習

はじめに

入れ子の型

C#の型は、クラスや構造体のスコープの中で定義できます。外側の型が、一種の名前空間の役割を果たします。その型にアクセスするときは、外側の型からドット記法でたどります。

class Outer
{
    public interface IInner {}
    public enum EInner {}
    public class CInner {}
    public struct SInner {}
}

var outer = new Outer();
var inner = new Outer.CInner();

内側の型にもアクセスレベルを設定できます。

外側の型のプライベートメンバーには、内側の型のメンバーからアクセスできますが、その逆はできません。

説明

「ほかの」エンジニアたちが、リモートコントロールカーのプロジェクトremote-control-competitionに取り組んできました。そのコードをきれいにするために呼ばれました。

1. 車本体とテレメトリシステムの関心を分離する

RemoteControlCarクラスをリファクタリングして、Telemetryプロパティ経由でアクセスするテレメトリのメソッドとプロパティを分離しましょう。

var car = new RemoteControlCar();
car.Telemetry.Calibrate();
car.Telemetry.SelfTest();
car.Telemetry.ShowSponsor("Walker Industries Inc.");
car.CurrentSponsor
// => "Walker Industries Inc."
car.Telemetry.SetSpeed(100, "cps");
car.GetSpeed()
// => "100 centimeters per second"

2. ほかのコードがTelemetry型に依存しすぎないようにする

Telemetryインスタンスが、車のスコープの外で作成できないようにしましょう。

3. ほかのコードがSpeed構造体に依存しないようにする

Speed構造体が、RemoteControlCarクラスのスコープの外で使えないようにしましょう。

4. ほかのコードがSpeedUnits列挙型に依存しないようにする

SpeedUnits列挙型が、RemoteControlCarクラスのスコープの外で使えないようにしましょう。

GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
C# Exercism

リモコンの片付けを始める準備はできましたか?

Exercismに登録すれば、62個のコンセプト178個の演習、そして本物の人間によるメンタリングとともに、C#を学んでマスターできます。すべて無料です。