2011-01-12 4 views
1

Некоторые из моих сотрудников широко используют концепцию модулей VB.net. К сожалению, я просто не понимаю. Я не вижу преимуществ в использовании модулей над общими классами. Я что-то упускаю? Когда было бы предпочтительнее использовать модуль? Или я (как это часто бывает на этом языке) «просто не понял»?Когда это хорошая идея использовать модуль vb.net

+1

Вы не можете объявить класс общедоступным в VB.Net. Модули довольно равны классам, в которых есть только общие члены и функции, частный конструктор и где только один экземпляр существует от начала приложения до конца. –

ответ

2

В VB.net модуль является общим классом. Когда они компилируются, им присваивается частный конструктор и методы, установленные для общего доступа.

Есть несколько случаев, когда вы вынуждены использовать модули компилятором (аналогично статическим классам на C#), например, для методов расширения, которые не могут быть созданы на стороне класса VB.Net.

Используя модули для ваших вспомогательных методов, вы упростите их позднее преобразовать в методы расширения и запретите другим добавлять какие-либо методы или конструкторы экземпляров.

Это говорит, что они зависают от VB6, которые не поддерживают полное программирование OO, и помимо автономных вспомогательных методов они не будут широко использоваться.

+0

Полностью согласен. Единственный раз, когда я использую модули, - это когда мне нужно создавать методы расширения. Если мне нужно сделать статический класс, я вместо этого сделаю обычный класс со статическими методами и частным конструктором. Я уверен, что модули существуют только для обновления проектов VB6 до VB.Net, и поэтому я считаю их такими же, как REM - технически доступными, но не должны использоваться. –

+0

@Chris: Если модули были каким-либо образом заменены или устарели или ненужны или излишни, они бы исчезли в использовании, как это делал REM. Вместо этого они теперь * необходимы *, чтобы использовать методы расширения, потому что модуль заполняет определенную нишу в VB.net, которая не заполняется никаким другим кодом кода, определенным языком. Они действительно будут лишними, если вы можете сказать «Public Shared Class Foo», но даже тогда это просто (уродливая) семантика - модуль и статический класс будут делать то же самое. Модули и классы IMO * должны быть объявлены по-разному, поскольку они имеют совершенно разные цели. – cHao

+0

Я бы сказал, что «статические классы» являются уродливыми с языков, у которых не было понятия «модуль», - и помимо временного использования для переноса некоторого кода, * они *, что не следует использовать , – cHao

1

Модуль по существу совпадает с общим классом. Основное различие заключается в том, что в модуле нет необходимости в дополнительных «общих», потому что все неявно разделяется. Если у вас нет данных экземпляра и просто используется класс как своего рода пространство имен для функций, то лучше подумать (IMO) использовать модуль и сделать это понятным.

Смежные вопросы