Как вы разрешаете обычное столкновение именования между типом и объектом? - PullRequest
11 голосов
/ 12 марта 2010

Поскольку стандартное соглашение 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; }
}

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

Ответы [ 5 ]

7 голосов
/ 12 марта 2010

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

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

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

1 голос
/ 12 марта 2010

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

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

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

public int RecordId

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

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

1 голос
/ 12 марта 2010

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

1 голос
/ 12 марта 2010

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

0 голосов
/ 12 марта 2010

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

Например:

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

public class Bar
{
    public Foo MyFoo { get; set; }
    // ...
}
...