Я часто нахожу, что хочу написать что-то вроде этого на C #, но мне неудобны имена идентификаторов:
public class Car
{
private Engine engine;
public Engine Engine
{
get
{
return engine;
}
set
{
engine = value;
}
}
public Car(Engine engine)
{
this.engine = engine;
}
}
Здесь у нас есть четыре разные вещи, называемые «двигатель»:
Engine
класс. Двигатель кажется хорошим, естественным именем.
Engine
государственная собственность. Кажется глупым называть это MyEngine или TheCarsEngine.
engine
частное поле, поддерживающее собственность. Некоторые схемы именования рекомендуют m_engine
или _engine
, но другие говорят, что следует избегать всех префиксов.
engine
имя параметра в конструкторе. Я видел схемы именования, которые рекомендуют префикс подчеркивания для всех параметров, например, _engine
. Мне это очень не нравится, так как параметр виден для вызывающих абонентов через Intellisense.
Что мне не нравится в написанном коде, так это:
- Если вы измените имя параметра в конструкторе, но пропустите его использование в теле конструктора, вы получите небольшую ошибку, которую компилятор, вероятно, не сможет обнаружить.
- В Intellisense есть плохая привычка автозаполнения не того, что вам нужно, и иногда вы не замечаете, что это изменило ситуацию. Вы снова получите небольшую ошибку, если тело конструктора случайно окажется
this.engine = Engine;
Кажется, что каждое имя уместно изолированно, но вместе они плохие. Что-то должно уступить, но что? Я предпочитаю менять приватное поле, так как оно невидимо для пользователей, поэтому я обычно получаю m_engine
, который решает некоторые проблемы, но вводит префикс и не мешает Intellisense изменять engine
на Engine
.
Как бы вы переименовали эти четыре элемента? Почему?
(Примечание: я понимаю, что свойство в этом примере может быть автоматическим. Я просто не хотел делать пример слишком сложным.)
Смотри также:
Аморально ли я использовать имя переменной, которая отличается от ее типа только регистром?