Соглашение об именах для частных полей VB.NET

StackOverflow https://stackoverflow.com/questions/7642

  •  08-06-2019
  •  | 
  •  

Вопрос

Существует ли официальное соглашение об именовании частных полей в VB.NET?Например, если у меня есть свойство под названием «Foo», я обычно называю частное поле «_Foo».Кажется, это осуждается в Официальные рекомендации:

«Не используйте префикс для имен полей.Например, не используйте g_ или s_ для различения статических и нестатических полей».

В C# вы можете вызвать частное поле «foo», свойство «Foo» и ссылаться на частное поле как «this.foo» в конструкторе.Поскольку VB.NET нечувствителен к регистру, вы не можете этого сделать – есть предложения?

Это было полезно?

Решение

Я до сих пор использую префикс _ в VB для частных полей, поэтому у меня будет _foo в качестве частного поля и Foo в качестве свойства.Я делаю это и для C#, и почти для любого кода, который пишу.В целом я бы не стал слишком зацикливаться на том, «как это правильно сделать», потому что на самом деле «правильного» способа не существует (хотя есть несколько очень плохих способов), а скорее позаботился бы о том, чтобы делать это последовательно.

В конце концов, согласованность сделает ваш код гораздо более читабельным и удобным в сопровождении, чем использование любого набора «правильных» соглашений.

Другие советы

Это личное предпочтение, хотя существует широко распространенная поддержка некоторый различие.Я не думаю, что даже в C# существует одно широко используемое соглашение.

Джефф Проуз говорит

По личным предпочтениям я обычно добавляю приватным полям подчеркивание [в C#]...Это соглашение довольно часто используется в платформе .NET, но не везде.

Из .NET Framework Рекомендации по проектированию 2-е издание, стр. 73.

Джеффри Рихтер говорит

Я делаю все свои поля частными и добавляю к полям экземпляра префикс «m_», а статическим полям — «s_» [в C#]

Из .NET Framework Рекомендации по проектированию 2-е издание, стр. 47.Энтони Мур (англ.Команда БКЛ) также считает, что использование «m_» и «s_» заслуживает рассмотрения, стр. 48.

Официальные рекомендации — это всего лишь рекомендации.Их всегда можно обойти.При этом мы обычно добавляем к полям подчеркивание. оба С# и VB.NET.Это соглашение довольно распространено (и, очевидно, игнорируется Официальными рекомендациями).

Затем на частные поля можно ссылаться без ключевого слова «me» (ключевое слово «this» предназначено для C# :)

В рекомендациях по проектированию, на которые вы ссылаетесь, конкретно указано, что они применяются только к статическим общедоступным и защищенным полям.Рекомендации по проектированию в основном сосредоточены на разработке общедоступных API;что вы делаете со своими частными участниками, зависит от вас.Я не уверен, но я относительно уверен, что частные члены не учитываются, когда компилятор проверяет соответствие CLS, потому что там участвуют только общедоступные/защищенные члены (идея такая: «Что, если кто-то, кто использует язык, который не позволяет персонажу _ пытаться использовать вашу библиотеку?" Если члены являются частными, ответ будет: "Ничего, пользователю не обязательно использовать эти члены". Но если члены являются общедоступными, у вас проблемы. )

Тем не менее, я собираюсь добавить к эхо-камере и отметить, что что бы вы ни делали, важно быть последовательным.Мой работодатель требует, чтобы частные поля как в C#, так и в VB имели префикс _, и поскольку все мы соблюдаем это соглашение, легко использовать код, написанный кем-то другим.

Большинство из вас, вероятно, знают, что в VB.NET 4.0 вам не нужно явно писать методы получения и установки для объявлений свойств следующим образом:

Public Property Foo As String
Public Property Foo2 As String

VB автоматически создает частные переменные-члены с именами _Foo и _Foo2.Кажется, что Microsoft и команда VS приняли соглашение _, поэтому я не вижу в этом проблемы.

Я не думаю, что существует официальное соглашение об именах, но я видел, что Microsoft использует m_ в dll Microsoft.VisualBasic (через отражатель).

Я все еще использую _ префикс в VB для частных полей, поэтому у меня будет _foo в качестве частного поля и foo в качестве собственности.Я делаю это и для C#, и практически любой код, который я пишу.Как правило, я бы не стал слишком увлечься «как правильный способ сделать это», потому что на самом деле нет «правильного» способа (хотя есть некоторые очень плохие способы), а скорее заботиться о том, чтобы делать это последовательно.

Я не нашел ничего лучше, чем «_» для ясности и последовательности.К минусам относятся:

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

Я согласен с @lomaxx, важнее быть последовательным во всей команде, чем иметь верно соглашение.

Тем не менее, вот несколько хороших мест, где можно получить идеи и рекомендации по соглашениям кодирования:

  1. Практические рекомендации и рекомендации по использованию Microsoft Visual Basic и Visual C# «Разработчики» Франческо Балены — отличная книга, в которой рассматриваются многие из этих проблем.
  2. Стандарты кодирования IDesign (для С# и для WCF)
  3. Платформа .NET Исходный код (в VS2008)

Я предпочитаю использовать префикс подчеркивания для частных полей.Я использую первую букву в нижнем регистре для параметров метода.Я следую рекомендации использовать строчные буквы для параметров в верблюжьем регистре, которые я считаю более важными, чем именование частных полей, поскольку они являются частью API класса..например

Public Class Class1

    Private _foo As String
    Public Property Foo() As String
        Get
            Return _foo
        End Get
        Set(ByVal value As String)
            _foo = value
        End Set
    End Property

    Public Sub New(ByVal foo As String)
        _foo = foo
    End Sub

End Class

Используя этот шаблон, у вас не возникнет конфликтов имен с частным полем и параметром конструктора в C# или VB.NET.

Я согласен, что самое главное не то, какой стиль вы используете, а то, чтобы он был последовательным.

С учетом сказанного, новый стиль MS/.NET для частных полей имеет тенденцию быть _fooVar (подчеркивание, за которым следует имя в верблюжьем регистре).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top