В недавнем проекте VB.NET я принял соглашения об именах, которые я привык использовать в C #. А именно, часто вызывая переменную с тем же именем, что и класс, на который она ссылается, только с другим регистром, например
Foo foo = new Foo(); // C#
Dim foo As New Foo() ' VB.NET
Я считаю, что часто это самый простой способ написания кода, особенно для небольших методов. Этот стиль кодирования, очевидно, прекрасно работает в C #, поскольку он чувствителен к регистру, и из-за подсветки синтаксиса, предоставляемой Visual Studio, очень легко увидеть, что имя класса и имя переменной различаются.
Однако, к моему удивлению, это также нормально работало почти в 100% случаев * в VB.NET. Единственная проблема заключалась в том, что имя переменной, по-видимому, принимало множественную идентичность. А именно, его можно использовать как для вызова методов экземпляра, так и для общих (статических) методов класса Foo. Это на самом деле не вызывало никаких проблем, это просто означало, что Intellisense предоставит список, содержащий как статические методы, так и методы экземпляра после того, как вы нажмете «.» после имени переменной.
Я снова обнаружил, к моему удивлению, что это на самом деле не привело к путанице в моем проекте, и пока он очень успешен! Однако я был единственным, кто работал над этим конкретным проектом.
Вот немного более длинный пример:
Dim collection as Collection = New Collection()
For Each bar As Bar in Bar.All()
collection.SomeInstanceMethod(bar)
Next
collection.SomeSharedMethod()
* Единственная проблема, с которой я столкнулся, заключалась в том, что иногда инструмент рефакторинга 'Rename' путался, т. Е. При переименовании класса он переименовывал переменные с тем же именем, что и у класса, в их строки объявления (Dim foo As...
), но не другие ссылки на эту переменную, вызывающие проблемы компилятора (дух). Их всегда было легко исправить.
Еще одно небольшое неудобство заключается в том, что средство подсветки синтаксиса VB.NET не выделяет имена классов иначе, чем имена переменных, что делает его не таким приятным, как при использовании его в C #. Я все еще нашел код очень читабельным, хотя.
Кто-нибудь еще пытался разрешить это в командной среде? Существуют ли другие потенциальные проблемы с этим соглашением об именах в VB.NET?