В недавнем проекте 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()
* Единственная проблема, которую я обнаружил, заключалась в том, что иногда инструмент рефакторинга «Переименовать» путался, т. Е. При переименовании класса он переименовывал переменные с тем же именем, что и класс, в их строках объявления (Dim foo As...
), но не другие ссылки на эту переменную вызывают проблемы с компилятором. Хотя это всегда было легко исправить.
Еще одна небольшая неприятность заключается в том, что средство подсветки синтаксиса VB.NET не выделяет имена классов иначе, чем имена переменных, что делает его не таким приятным, как при использовании его в C#. Я все еще нашел код очень читаемым, хотя.
Кто-нибудь еще пытался разрешить это в командной среде? Существуют ли какие-либо другие потенциальные проблемы с этим соглашением об именах в VB.NET?