MyTetra Share
Делитесь знаниями!
Практики использования свойств
Время создания: 07.09.2020 05:38
Автор: Юрий Шпорхун SkillBox
Текстовые метки: Практики кода, стиль кода
Раздел: Компьютер - C# - Стиль кода
Запись: Kozlov-AE/Tetra/master/base/1599446316l2828q81fj/text.html на raw.githubusercontent.com

Хорошие практики
1. Если ваш код только получает значение свойства – старайтесь писать get only свойства
При этом, если значение свойства устанавливается только в классе, где оно объявлено вы
можете использовать private set:
public int MyProperty { get; private set; }
Если же свойство задается один раз в конструкторе или при непосредственной
инициализации – используйте только get.
public int MyProperty { get; }
Также не стоит забывать о краткой записи такого свойства с помощью expression-bodied
member.
public int MyProperty => <Выражение>;
2. Старайтесь, по возможности, инициализировать ваши свойства:
public string MyProperty { get; } = string.Empty; // Инициализированное свойство
Но при этом не используйте для инициализации выражение, которое может привести к
потере производительности.
3. Ваш класс должен быть спроектирован так чтобы свойства в нем можно было
устанавливать в любом порядке. Если же ваш класс спроектирован таким образом, что
сначала надо установить свойство 1, а только затем свойство 2 для корректной работы, а
не наоборот, стоит задуматься о рефакторинге.


Плохие практики
1. Не стоит выбрасывать исключения в геттере:
public string MyProperty
{
get
{
//Плохая практика
if(myVar == null)
{
throw new NullReferenceException();
}
return myVar;
}
set => myVar = value;
}

2. Не стоит делать set only свойства, если ваше свойство можно только задавать из
внешнего кода – лучше использовать для этого метод.
3. Не стоит сохранять значение свойства в сеттере до того, как вы выбросили
исключение. Если в вашем сеттере выбрасывается исключение – ваше свойство
должно сохранить старое значение:
public string MyProperty
{
get => myVar;
set
{
// Плохая практика
myVar = value;
if(value.Length < 3)
{
throw new ArgumentException("Имя слишком короткое");
}
}
}

 
MyTetra Share v.0.65
Яндекс индекс цитирования