Что такое модуль в .NET? - PullRequest
       21

Что такое модуль в .NET?

50 голосов
/ 14 марта 2009

Что такое модуль? В чем разница между модулем, классом и функцией? Как я могу получить доступ к модулю в C #?

Я спрашиваю об этом, потому что хочу вычислить контрольную сумму кода IL только для некоторых конкретных функций во время выполнения (без использования подписи кода).

Ответы [ 4 ]

52 голосов
/ 14 марта 2009

Модуль - это логическая коллекция кода в сборке. Внутри сборки может быть несколько модулей, и каждый модуль может быть написан на разных языках .NET (насколько я знаю, VS не поддерживает создание многомодульных сборок).

Сборки содержат модули. Модули содержат классы. Классы содержат функции.

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

10 голосов
/ 14 марта 2009

Как дополнение к другим ответам:

В MSDN говорится: «Модуль - это файл промежуточного языка Microsoft (MSIL), у которого нет манифеста сборки».

Модули можно «связать» вместе, создав манифест сборки с помощью утилиты Assembly Linker (al.exe). Если я правильно помню, CLR может загружать отдельные модули для сборки, так что загружаются только необходимые модули.

РЕДАКТИРОВАТЬ: нашел лучшее описание сетевых модулей и почему вы хотели бы их.

Есть еще один вопрос здесь, на SO, который касается темы контрольной суммы. В ответах упоминается использование метода GetILAsByteArray для получения IL.

5 голосов
/ 15 июля 2011

Файл

Вот что такое модуль.

module: A single file containing content that can be executed by the VES

(Где VES - это программа, которая читает сборку .NET и преобразует ее в машинный код.) 1009 * Раздел I, стр. 16.

-

Сборка - это связная коллекция файлов в файловой системе (модулях). Смотри http://msdn.microsoft.com/en-us/library/zst29sk2(vs.71).aspx

Очевидно, определения классов определены внутри самого файла (модуля).

1 голос
/ 21 февраля 2018

Также есть оператор "модуль" VB, который не связан со сборками и компиляцией и похож на статический класс C #:

https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/statements/module-statement

Оператор Module определяет ссылочный тип, доступный в его пространстве имен. Модуль (иногда называемый стандартным модулем) похож на класс, но с некоторыми важными отличиями. Каждый модуль имеет ровно один экземпляр, и его не нужно создавать или присваивать переменной. Модули не поддерживают наследование или реализуют интерфейсы. Обратите внимание, что модуль не является типом в том смысле, что это класс или структура - вы не можете объявить программный элемент для типа данных модуля.

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

Модуль имеет то же время жизни, что и ваша программа. Потому что его члены Все они совместно используются, у них также есть время жизни, равное времени жизни программы.

Модули по умолчанию для доступа друзей. Вы можете настроить свои уровни доступа с модификаторами доступа. Для получения дополнительной информации см. Уровни доступа в Visual Basic.

Все члены модуля неявно делятся.

В коротких модулях в VB есть аналоги для статических классов C #

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