Для чего нужны классы и модули в C # - PullRequest
19 голосов
/ 30 января 2010

Может кто-нибудь объяснить разницу между классом и модулем. Когда вы используете один против другого? Я использую C #.

Обновление: я имею в виду эквивалент C # модуля VB.

Ответы [ 6 ]

15 голосов
/ 30 января 2010

Это сильно зависит от того, на какой «Модуль» вы ссылаетесь.

Модуль Visual Basic

В C # нет реального эквивалента для модуля VB.Net. В некотором смысле он похож на статический класс в том, что вы не можете создать его экземпляр, и все члены внутри него являются статическими. В C # это требует явного статического ключевого слова, в то время как в VB.Net оно неявное.

Большая разница в поиске имен. В VB.Net, если модуль находится в области видимости, любой из его методов может быть вызван без квалификации. Это не верно для статических классов C #.

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

System.Reflection.Module

Модуль в этом контексте является переносимым исполняемым файлом (dll или exe). Данная DLL / EXE может состоять из нескольких модулей, если это многофайловая сборка. Это не имеет реального отношения к отдельному классу.

6 голосов
/ 30 января 2010

(Может быть, я должен быть ясен, в C # нет "Модулей", как в "Модуле" VB.NET)

В C # нет модулей (например, модулей в VB или VB.NET). Таким образом, вместо модуля, который компилируется и упаковывается в сборку, он более логичен.

Принимая во внимание, что класс является четко определенной сущностью. Модуль может использовать класс (или классы) для работы. (Снова слово «модуль» используется логически)

Слово «Модуль» также используется в совершенно ином контексте, в System.Reflection.Module

6 голосов
/ 30 января 2010

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

Кроме того, модули, будь то один или несколько, составляют сборку в .Net

Помните, что после компиляции.Тем не менее, не имеет значения, на каком языке он был написан, это все IL, поэтому описываемые вами термины в значительной степени не зависят от языка.

4 голосов
/ 30 января 2010

A class является независимой единицей данных и функций - полей, свойств и методов.

Модуль относится к коду, созданному из одного физического файла. В большинстве случаев, когда вы пишете код в Visual Studio, один файл будет содержать один класс, интерфейс или структуру.

Скомпилированные библиотеки DLL или EXE называются сборками . Сборка может содержать любое количество модулей, а также другие ресурсы, такие как информация о версии. По умолчанию при компиляции сборки в Visual Studio сборка содержит каждый модуль, определенный в проекте.

Что касается того, когда вы будете их использовать: вы используете классы, интерфейсы и структуры все время, это основные принципы. Модули - это вещи, которые вы обычно не контролируете; Опять же, общепринятая практика - иметь один тип на файл, который компилируется в один тип на модуль.

Обычно вы используете отдельную сборку, если хотите повторно использовать определенные типы (содержащиеся в определенных модулях) в нескольких проектах. Вы также можете использовать его для создания жесткой границы между различными компонентами приложения, т. Е. Поместить логику вашей базы данных в одну сборку и вашу бизнес-логику в другую.

2 голосов
/ 30 января 2010

В C # нет эквивалента модулю VB6. Ближайшим был бы статический класс, но даже в этом случае члены класса не являются глобальными, как это было бы в модуле VB6.

2 голосов
/ 30 января 2010

.NET Framework модуль отличается от модуля в Visual Basic, который используется программистами для организациифункции и подпрограммы в приложении (см. класс модуля в C # )Если вы привыкли к модулю VB6 (метод, который доступен без экземпляра), объявите функции как static в c #

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