Что такое хорошее соглашение об именах, чтобы отличать имя класса от свойства в С#?

Я часто сталкивался с этим настолько, что думал, что увижу, что другие говорили об этом.

Используя соглашения StyleCop, я обнаруживаю, что у меня часто есть имя свойства, которое трудно отличить от имени класса, к которому он обращается. Например:

public class ProjectManager
{
 // Stuff here
}

public class OtherClass
{
     private ProjectManager ProjectManager { get; set; }
}

Он компилируется и запускается, но похоже, что это был бы простой способ запутать вещи, даже с использованием "this".

Ответ 1

Это действительно очень распространенный шаблон в программировании .Net. В частности, с типами перечисления и членами, так как это руководство по проектированию .Net рекомендовало способ программирования.

Ссылка на рекомендации по проектированию

Хотя это может быть немного запутанным, это не один раз, когда вы видели его несколько раз. Инструменты хорошо поддерживают этот шаблон, и, учитывая, что это тип, а другой - случай, он случайно случайно инвертирует их, не вызывая ошибки компиляции.

Ответ 2

Это типичное соглашение об именах, когда в любом классе будет только одно свойство типа ProjectManager. Он перестает вводить в заблуждение, потому что нет другого использования типа ProjectManager.

Конечно, если есть другие виды использования, вам нужны разные имена.

Ответ 3

Я согласен с другими ответами. Для полноты, иногда я нахожу способ обобщить имя класса немного больше. Я понимаю, что ваш пример был всего лишь примером, но один из способов сделать это:

public class Person
{
  // Stuff here
}

public class OtherClass
{
  private Person ProjectManager { get; set; }
}

Это помогает сделать его более читаемым. Но вполне приемлемо (и даже рекомендуется) иметь одинаковое имя и свойство класса.