Властивість у 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 завдань, кожне з яких вимагає реалізувати одну або кілька властивостей:
Щоб задовольнити різні потреби, кожну зважувальну машину можна налаштувати з точністю (кількість цифр після десяткового розділювача).
Реалізуйте клас WeighingMachine так, щоб у нього була властивість Precision лише для читання, значення якої дорівнює аргументу precision конструктора:
var wm = new WeighingMachine(precision: 3);
// => wm.Precision == 3
Реалізуйте властивість WeighingMachine.Weight так, щоб вагу можна було і читати, і задавати:
var wm = new WeighingMachine(precision: 3);
wm.Weight = 60.5;
// => wm.Weight == 60.5
Очевидно, що вага не може бути відʼємною.
Додайте перевірку до властивості WeighingMachine.Weight, щоб під час спроби задати відʼємну вагу вона викидала ArgumentOutOfRangeException:
var wm = new WeighingMachine(precision: 3);
wm.Weight = -10; // Throws an ArgumentOutOfRangeException
Коригування тари може бути будь-яким значенням (навіть відʼємним або таким, що робить показану вагу відʼємною)
Реалізуйте властивість WeighingMachine.TareAdjustment, щоб коригування тари можна було задавати:
var wm = new WeighingMachine(precision: 3);
wm.TareAdjustment = -10.6;
// => wm.TareAdjustment == -10.6
Після ретельних тестувань зʼясувалося, що через виробничу проблему всі зважувальні машини схильні завищувати вагу на 5.
Змініть властивість WeighingMachine.TareAdjustment так, щоб її типовим значенням було 5.
var wm = new WeighingMachine(precision: 3);
// => wm.TareAdjustment == 5.0
Реалізуйте властивість 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"
Зареєструйтеся на Exercism, щоб вивчати й опановувати C#, а також 62 концепції178 вправ та справжнє наставництво від людей, і все це безкоштовно.