學習軌道
/
C#
C#
/
練習
/
體重計
體重計

體重計

學習練習

簡介

屬性

C# 中的屬性是類別的一種成員,提供存取該類別內資料的方式。呼叫端可以設定或取得(get)資料。屬性可以是自動實作,也可以有支援欄位。屬性由 set 存取子和/或 get 存取子組成。在其他某些語言中,「mutator」大致等同於 set 存取子,「accessor」則大致等同於 get 存取子,儘管兩者的語法組合方式完全不同。

設定屬性時,輸入值可以被驗證、格式化或以其他方式處理,事實上,只要是類別中程式碼能存取的任何程式化操作,都可以執行。

同樣地,取得屬性時,資料可以被計算或格式化,而且類別可用的任何程式化操作也都可以執行。

屬性和其他類別成員一樣具有存取修飾詞(如 public、private 等),但 set 存取子的存取層級可以獨立於取得(get)存取子,反之亦然。屬性不一定要同時具備兩個存取子,也可以只有其中一個(get 或 set)。

表達屬性的基本語法有兩種形式:

以欄位/運算式為基礎的屬性:

private int myField;
public int MyProperty
{
    get { return myField; }
    set { myField = value; }
}

自動實作屬性

public int MyProperty { get; private set; } = 42;

初始化並非必要。

說明

在這個練習中,你將建立一台磅秤的模型,並以公斤作為單位。

這個練習共有 6 個任務,每個任務都需要你實作一或多個屬性:

1. 讓磅秤具有精度

為了滿足不同的需求,我們讓每台磅秤都能自訂精度(小數分隔符號後面的位數)。 實作WeighingMachine類別,讓它有一個唯讀的Precision屬性,其值為建構子的precision引數:

var wm = new WeighingMachine(precision: 3);

//  => wm.Precision == 3

2. 讓磅秤可以設定重量

實作WeighingMachine.Weight屬性,讓重量可以被取得和設定:

var wm = new WeighingMachine(precision: 3);
wm.Weight = 60.5;

//  => wm.Weight == 60.5

3. 確保負數的輸入重量會被拒絕

很顯然地,重量不可能是負數。 為WeighingMachine.Weight屬性加上驗證,在嘗試將它設為負數重量時擲回ArgumentOutOfRangeException:

var wm = new WeighingMachine(precision: 3);
wm.Weight = -10; // Throws an ArgumentOutOfRangeException

4. 讓磅秤可以套用皮重調整

皮重調整可以是任何值(甚至是負數,或是會讓顯示重量變成負數的值)。 實作WeighingMachine.TareAdjustment屬性,讓皮重調整可以被設定:

var wm = new WeighingMachine(precision: 3);
wm.TareAdjustment = -10.6;

// => wm.TareAdjustment == -10.6

5. 確保磅秤有預設的皮重調整

經過一番徹底測試後,發現因為製造上的問題,所有磅秤都會將重量高估5。 將WeighingMachine.TareAdjustment屬性的預設值改為5。

var wm = new WeighingMachine(precision: 3);

// => wm.TareAdjustment == 5.0

6. 讓重量可以被取得

實作WeighingMachine.DisplayWeight屬性,它應該回傳一個字串,顯示經過皮重調整後的重量,並套用正確的精度,再加上單位。 請注意: display-weight = input-weight - tare-adjustment

var wm = new WeighingMachine(precision: 3);
wm.Weight = 60.567;
wm.TareAdjustment = 10;

// => wm.DisplayWeight == "50.567 kg"
透過 GitHub 編輯 連結會在新視窗或分頁中開啟
C# Exercism

準備好開始 體重計 了嗎?

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