Я сталкиваюсь с этим достаточно часто, что я думал, что буду видеть то, что другие должны были сказать об этом.
Используя конвенции StyleCop, я нахожу, что у меня часто есть имя свойства, которое трудно сделать отличающимся, чем имя класса, к которому оно получает доступ. Например:
public class ProjectManager
{
// Stuff here
}
public class OtherClass
{
private ProjectManager ProjectManager { get; set; }
}
Это компилирует и работает, но кажется, что был бы простой способ перепутать вещи, даже с использованием "этого".
На самом деле это очень распространенный шаблон в программировании .Net. В частности, это касается типов и членов перечислений, поскольку это рекомендуемый способ программирования .Net Design Guidelines.
Ссылка на руководство по проектированию 4.0
Хотя это может немного сбивать с толку, но не единожды вы видели это несколько раз. Инструменты хорошо поддерживают этот шаблон, и, учитывая, что один является типом, а другой - экземпляром, трудно случайно инвертировать их, не вызывая ошибки компиляции.
Я согласен с другими ответами. Для полноты картины иногда я нахожу способ немного обобщить имя класса. Я понимаю, что ваш пример был всего лишь примером, но один из способов сделать это:
public class Person
{
// Stuff here
}
public class OtherClass
{
private Person ProjectManager { get; set; }
}
Это помогает сделать его более читабельным. Но совершенно приемлемо (и даже рекомендуется) иметь идентичное имя класса и свойство.
Это типичное соглашение об именах, когда в любом заданном классе будет только одно свойство типа ProjectManager
. Это перестает сбивать с толку, потому что нет другого использования типа ProjectManager
.
Конечно, если есть другие варианты использования, вам нужны другие имена.