Каковы соглашения для именования переменных в .NET, чтобы избежать путаницы между параметрами и свойствами? - PullRequest
2 голосов
/ 21 октября 2010

В приведенном ниже примере, как бы вы назвали параметр, если он используется для инициализации свойства FromDate?

Для методов конструктора класса мне бы хотелось, чтобы имя переменной параметра конструктора совпадало с именемимущества, которое инициализируется.Например, параметр «fromDate» используется для инициализации переменной уровня модуля «_FromDate» с помощью оператора _FromDate = fromDate.Аналогично, я мог бы написать Me.FromDate = fromDate.

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

Однако VB не чувствителен к регистру, что я обычно ценю.В следующем примере я использую имя параметра, совпадающее с именем свойства «fromDate», а VB ссылается на локальный экземпляр при наличии неоднозначности. Однако многие, вероятно, утверждают, что эта «неоднозначность» предоставляет возможность для разработчикачтобы запутаться и не понять, какая переменная используется. Например, ниже у меня было намерение передать ДВА параметра, fromDate и toDate, но я случайно пропустил один, и в результате VB.NET не предупредилЯ ошибся, потому что предполагал, что оператор _ToDate = ToDate был эквивалентен _ToDate = Me.ToDate вместо того, чтобы сообщать мне, что переменная в правой части оператора присваивания была необъявленной.

Public Class Period

    Property FromDate As Date
    Property ToDate As Date

    Public Sub New(ByVal fromDate As Date)

        If fromDate > ToDate Then
            Throw New ArgumentException("fromDate must be less than or equal to toDate")
        End If

        _FromDate = fromDate
        _ToDate = ToDate

    End Sub


End Class

Так чтоявляется лучшим решением для VB.NET?

По моему мнению, у нас должно быть соглашение о префиксе всех переменных параметров с префиксом, но разве Microsoft не препятствует использованию префиксов? Например:

Public Sub New(ByVal paramFromDate As Date, paramToDate As Date)

.. или, возможно, его можно сократить до pFromDate, pToDate ...

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

Что вы делаете?

Ответы [ 3 ]

3 голосов
/ 21 октября 2010

Используйте самый понятный код, который я бы посоветовал: , а не префикс. Я думаю, что использование одного и того же имени (первая буква в нижнем регистре) является наиболее понятным кодом. Чтобы избежать возникшей проблемы, я бы использовал инструмент, такой как предупреждения компилятора, FxCop или ReSharper, чтобы предупредить меня, что я назначаю что-то себе, поскольку это почти наверняка ошибка во всех сценариях.

3 голосов
/ 22 октября 2010

Я знаю, что это противоречит всем соглашениям Microsoft, но мы используем v_ для параметров ByVal, r_ для параметров ByRef и m_ для переменных уровня модуля.Это позволяет вам иметь

m_FromDate = v_FromDate

И вы можете сразу увидеть, что происходит, без необходимости проверять определения переменных.Я думаю, что самым большим аргументом для не венгерского языка было то, что современные IDE позволяют вам видеть тип при наведении курсора, а изменение типа приведет к неправильным переменным.Этот префикс области видимости не конфликтует с этой теорией, а также с CodeRush и ReSharper вы можете обновлять каждый экземпляр переменной, если это требуется.

2 голосов
/ 21 октября 2010

Лично я предпочитаю соглашение префикса _, но есть и другие, которые мне тоже нравятся. В PL / SQL мои параметры имеют префикс in_, out_ или io_ для параметров in, out или in / out.

Мне не нравится использовать только прописные и строчные буквы для различения на любом языке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...