Ваги

Ваги

Навчальна вправа

Вступ

Властивості

Властивість у C# - це член класу, який надає доступ до даних усередині цього класу. Код, який викликає, може встановлювати ці дані або отримувати (get) їх. Властивості можуть бути автоматично реалізованими або мати допоміжне поле. Вони складаються із засобу доступу set та/або засобу доступу get. У деяких інших мовах «мутатор» приблизно відповідає засобу доступу set, а «аксесор» - засобу доступу 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, яка має повертати рядок тексту (англ. string) із вагою після коригування тари, із застосованою правильною точністю та доданою одиницею вимірювання. Зауважте, що: 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, щоб вивчати й опановувати C#, а також 62 концепції178 вправ та справжнє наставництво від людей, і все це безкоштовно.