Как Вы разрешаете общую коллизию именования между типом и объектом?

Так как стандарт 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; }
}

Это, кажется, компилирует, но чувства так неправильно. Есть ли рекомендовать соглашение о присвоении имен избежать этого?

11
задан Catskul 12 March 2010 в 18:10
поделиться

5 ответов

Наличие типа и свойства с одинаковыми именами не редкость. Да, это выглядит немного странно, но, надо признать, переименование свойств во избежание столкновения выглядит еще более странным.

Эрик Липперт имел сообщение в блоге на эту тему .

Однако для компилятора нет двусмысленности.

7
ответ дан 3 December 2019 в 10:03
поделиться

Честно говоря, меня это устраивает - если ваши статические методы / члены явно не статичны по имени и по назначению, у вас большие проблемы чем коллизия имен.

1
ответ дан 3 December 2019 в 10:03
поделиться

Соглашение C # заключается в том, чтобы называть свойства таким же образом, как вы называете свои классы. Причина, по которой вы считаете, что это неправильно, состоит в том, что вы пришли из другого фона. Но если вы какое-то время используете if, вы поймете, что это не вызывает у вас никаких проблем и будет казаться довольно естественным, когда вы к нему привыкнете. Нет места, когда он никак не столкнется. Я (как разработчик C #) считаю, что соглашение о начальных строчных буквах для свойств кажется неправильным. Просто нужно к этому привыкнуть.

1
ответ дан 3 December 2019 в 10:03
поделиться

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

  • Pascal Case, без подчеркиваний.
  • Старайтесь избегать сокращений.
  • Члены должны отличаться более чем на регистр , чтобы их можно было использовать в языках без учета регистра , таких как Visual Basic .NET.

Почему: это соглашение совместимо с .NET Framework и его легко прочитать. например

public int RecordId

ссылка: Стандарты программирования NET и соглашения об именах

также проверьте это: Общие соглашения об именах

1
ответ дан 3 December 2019 в 10:03
поделиться

это, говоря, что я не возражаю против столкновения, так как компилятор может это решить. Однако в духе предложения других решений, которые я видел,и позволяя другим решать за себя ... Я думаю, что именно здесь возник уродливый (для меня) образец использования My *.

Например:

public class Foo { /* ... */ }

public class Bar
{
    public Foo MyFoo { get; set; }
    // ...
}
0
ответ дан 3 December 2019 в 10:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: