Так как стандарт c# конвенция должен использовать для своей выгоды первую букву общественных собственностей, старую конвенцию C++ первоначального капитала для имен типов, и начальный нижний регистр для неимен типов не предотвращает классическую коллизию имени, где самое очевидное имя объекта соответствует имени типа:
class FooManager
{
public BarManager BarManager { get; set; } // Feels very wrong.
// Recommended naming convention?
public int DoIt()
{
// 1st and 2nd Bar Manager are different symbols
return BarManager.Blarb + BarManager.StaticBlarb;
}
}
class BarManager
{
public int Blarb { get; set; }
public static int StaticBlarb { get; set; }
}
Это, кажется, компилирует, но чувства так неправильно. Есть ли рекомендовать соглашение о присвоении имен избежать этого?
Наличие типа и свойства с одинаковыми именами не редкость. Да, это выглядит немного странно, но, надо признать, переименование свойств во избежание столкновения выглядит еще более странным.
Эрик Липперт имел сообщение в блоге на эту тему .
Однако для компилятора нет двусмысленности.
Честно говоря, меня это устраивает - если ваши статические методы / члены явно не статичны по имени и по назначению, у вас большие проблемы чем коллизия имен.
Соглашение C # заключается в том, чтобы называть свойства таким же образом, как вы называете свои классы. Причина, по которой вы считаете, что это неправильно, состоит в том, что вы пришли из другого фона. Но если вы какое-то время используете if, вы поймете, что это не вызывает у вас никаких проблем и будет казаться довольно естественным, когда вы к нему привыкнете. Нет места, когда он никак не столкнется. Я (как разработчик C #) считаю, что соглашение о начальных строчных буквах для свойств кажется неправильным. Просто нужно к этому привыкнуть.
Я не думаю, что это когда-либо вызывало у меня проблемы. Ниже приведены общие соглашения о свойствах. Единственная вещь , полезная
, - это привыкание
к этим ....
Почему: это соглашение совместимо с .NET Framework и его легко прочитать. например
public int RecordId
ссылка: Стандарты программирования NET и соглашения об именах
также проверьте это: Общие соглашения об именах
это, говоря, что я не возражаю против столкновения, так как компилятор может это решить. Однако в духе предложения других решений, которые я видел,и позволяя другим решать за себя ... Я думаю, что именно здесь возник уродливый (для меня) образец использования My *.
Например:
public class Foo { /* ... */ }
public class Bar
{
public Foo MyFoo { get; set; }
// ...
}