Соглашение об именах для частных полей VB.NET
-
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
- Имеет тенденцию теряться, когда VB рисует горизонтальные линии в моей IDE.
Я обхожу строки, отключая их в редакторе, и стараюсь не слишком много думать о соответствии CLS.
Я согласен с @lomaxx, важнее быть последовательным во всей команде, чем иметь верно соглашение.
Тем не менее, вот несколько хороших мест, где можно получить идеи и рекомендации по соглашениям кодирования:
- Практические рекомендации и рекомендации по использованию Microsoft Visual Basic и Visual C# «Разработчики» Франческо Балены — отличная книга, в которой рассматриваются многие из этих проблем.
- Стандарты кодирования IDesign (для С# и для WCF)
- Платформа .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 (подчеркивание, за которым следует имя в верблюжьем регистре).