Модули все еще широко используются в программных структурах? - PullRequest
3 голосов
/ 18 августа 2010

Я ни в коем случае не являюсь разработчиком программ, но я действительно хотел бы начать лучше понимать, как это делать, и лучше понимать языки .NET в целом (VB, C #). Я читал книгу Wrox - Professional Visual Basic 2008. В ней я считал, что упоминается, что модули постепенно исчезают. Я понимаю, почему большая часть кода переходит в объект класса, но я бы предположил, что модули всегда будут необходимы, по крайней мере, для поддержания чистоты кода.

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

Спасибо.

Ответы [ 4 ]

4 голосов
/ 18 августа 2010

Хотя в целом они не совсем подходят для ООП, они все еще используются и требуются в некоторых случаях.

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

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

Как и все в программировании (и многих других вещах), они имеют свое применение, и, пока они не используются не по назначению, с ними нет проблем.Правильный инструмент для работы!

3 голосов
/ 18 августа 2010

Ключевое слово Module в VB.NET в основном существует для совместимости с VB6 и более ранними версиями.В то время большая часть кода VB была процедурной с автономными подпрограммами и функциями, не относящимися к классу.Язык получил ключевое слово Class где-то около VB4.Не истинные классы в смысле ООП, они не поддерживают наследование.Функция отсутствует в базовой архитектуре COM.

Она не очень хорошо соответствует модели исполнения, предоставляемой CLR.Для свободных функций нет поддержки, каждый метод должен быть членом класса.Компилятор VB.NET эмулирует модули, объявляя класс, процедуры модуля становятся общими методами этого класса.Это можно увидеть с помощью Ildasm.exe:

.class private auto ansi sealed ConsoleApplication1.Module1
       extends [mscorlib]System.Object
{
  .custom instance void [Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.StandardModuleAttribute::.ctor() = ( 01 00 00 00 ) 
} // end of class ConsoleApplication1.Module1

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

Компилятор C # делает то же самое со «статическим классом», CLR также не имеет понятия о статических классах.Есть много веских причин для статических классов, идея «Модуль» не устарела.Вы можете сделать то же самое, объявив NotInheritable Class в коде VB.NET, используя только общие методы.Компилятор VB.NET, однако, не предписывает использование методов Shared, как это делает компилятор C #, и не позволяет объявлять класс закрытым.Таким образом, модуль просто отлично.

0 голосов
/ 18 августа 2010

Вам нужны модули, чтобы определить свои Методы расширения

0 голосов
/ 18 августа 2010

Модули - это самая близкая вещь, которую VB имеет к статическим классам, что может быть очень полезно даже при программировании в объектно-ориентированной среде.

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

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