Проверка на входните данни на метода за промяна на стойността на свойство
В процеса на програмиране е добра практика данните, които се подават на setter метода за модификация на свойство да бъдат проверявани дали са валидни и в случай че не са да се вземат необходимите "мерки". Най-често при некоректни данни се предизвиква изключение.
Да вземем отново примера с възрастта на кучето. Както знаем, тя трябва да бъде положително число. За да предотвратим възможността някой да присвои на свойството Age стойност, която е отрицателно число или нула, добавяме следната проверка в началото на setter метода:
public int Age
{
get { return this.age; }
set
{
// Take precaution: пerform check for correctness
if (value <= 0)
{
throw new ArgumentException(
"Invalid argument: Age should be a negative number.");
}
// Assign the new correct value
this.age = value;
}
}
|
В случай, че някой се опита да присвои стойност на свойството Age, която е отрицателно число или 0, ще бъде хвърлено изключение от тип ArgumentException с подробна информация какъв е проблемът.
За да се предпази от невалидни данни един клас трябва да проверява подадените му стойности в setter методите на всички свойства и във всички конструктори, както и във всички методи, които могат да променят някое поле на класа. Практиката класовете да се предпазват от невалидни данни и невалидни вътрешни състояния се използва широко в програмирането и е част от концепцията "Защитно програмиране", която ще разгледаме в главата "Качествен програмен код".
Видове свойства
В зависимост от особеностите им, можем да класифицираме свойствата по следния начин:
1. Само за четене (read-only), т.е. тези свойства имат само get метод, както в примера с лицето на правоъгълник.
2. Само за модифициране (write-only), т.е. тези свойства имат само set метод, но не и метод за четене на стойността на свойството.
3. И най-честият случай е read-write, когато свойството има методи както за четене, така и за промяна на стойността.
Алтернативен похват за работа със свойства
Преди да приключим секцията ще отбележим още нещо за свойствата в един клас, а именно – как можем да декларираме свойства в С#, без да използваме стандартния синтаксис, разгледан до момента.
В езици за програмиране като Java, в които няма концепция (и съответно синтактични средства) за работа със свойства, свойствата се декларират чрез двойка методи, отново наречени getter и setter, по подобие на тези, които разгледахме по-горе.
Тези методи трябва да отговарят на следните изисквания:
1. Методът за четене на стойността на свойство е метод без параметри, който трябва да връща резултат от тип, идентичен с типа на свойството и името му да е образувано от името на свойството с представка Get:
Сподели с приятели: |