Подтвердить что ты не робот

В чем разница между модулем и классом?

При добавлении нового файла в проект VB.Net в Visual Studio мне предоставляется возможность как "класса", так и "модуля". Класс описывается как

An empty class file

Пока модуль описывается как

A file for storing groups of functions

Это означает, что модуль менее полезен для класса, поскольку класс может хранить группы функций и т.д.

Это тот случай, когда модуль представляет собой просто группу функций или есть больше для модуля, чем предполагает документация на визуальной студии?

4b9b3361

Ответ 1

класс - это тип. Вы можете использовать этот тип, как и любой другой тип (String, Integer, Date, FileInfo...), для объявления переменных, параметров, свойств и типов возвращаемых функций.

Давайте сделаем небольшой пример:

Public Class Person
    Public Property FirstName As String
    Public Property LastName As String

    Public Overridable Sub Print() 'I'll explain Overridable later.
        Console.WriteLine("{0} {1}", FirstName, LastName)
    End Sub
End Class

Теперь вы можете объявить переменные типа Person

Dim sue, pete As Person
Dim persons As List(Of Person)

sue = New Person()
sue.FirstName = "Susan"
sue.LastName = "Miller"

pete = New Person()
pete.FirstName = "Peter"
pete.LastName = "Smith"

persons = new List(Of Person)()
persons.Add(sue)
persons.Add(pete)

For Each person As Person In persons
    person.Print()
Next

В то время как модули являются статическими. То есть Данные, хранящиеся в модуле, существуют ровно один раз. С другой стороны, вам не нужно создавать экземпляр модуля с New, поэтому они часто используются для хранения глобальных данных и для методов, которые доступны глобально. Например, вы можете сохранить список людей в модуле.


Но есть гораздо больше, что вы можете сделать с классами. Вы можете получить класс из базового класса. Этот новый класс наследует все от базового класса и может добавить к нему больше вещей. Например, вы можете получить класс Employee из Person

Public Class Employee
    Inherits Person

    Public Property Salary As Decimal

    Public Overrides Sub Print
        Console.WriteLine("{0} {1}, Salary = {2}", FirstName, LastName, Salary)
    End Sub
End Class

Ключевое слово Overridable в Person.Print позволяет производным классам переопределять (переопределять) метод Print. (Функции и подпрограммы в классах называются методами.)

Сотрудники совместимы с персоналом. Вы можете добавить сотрудника в список persons. Это не требует каких-либо изменений в цикле For Each, т.е. вызов person.Print() автоматически вызывает правильный метод Print (первый для "обычных" людей, а второй для сотрудников).

Dim emp as Employee

emp = New Employee()
emp.FirstName = "Frank"
emp.LastName = "Taggart"
emp.Salary = 3500.00D

persons.Add(emp)

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

Смотрите Объекты и классы в Visual Basic и особенно раздел Различия между классами и модулями.

Ответ 2

Класс - это скорее единица, а модуль - это, по сути, свободный набор таких вещей, как функции, переменные или даже классы.

В открытом модуле классы в проекте имеют доступ к функциям и переменным модуля. Вам не нужно указывать имя модуля для его адресации. Вы также можете иметь классы в модуле.

Переменные и функции класса находятся под более жестким "владением" класса. Публичные переменные и функции (методы), используемые другими классами, используются с именем класса: classname.method, в отличие от модулей в модулях.

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

Ответ 3

Модуль - это не что иное, как другое имя для статического класса.

Это все, что есть.

Если вы этого не верите, скомпилируйте модуль с VB.NET и декомпилируйте с помощью ILSpy с помощью C-Sharp.

И да, это означает, что вы правы, с точки зрения функциональности, модуль является SUBset класса.

Из этого следует, что с точки зрения функциональности класс является SUPERset модуля, поскольку он может содержать статические, а также нестатические методы и переменные, а также модификаторы виртуального и защищенного доступа.

Ответ 4

Основное различие между классами и модулями состоит в том, что классы могут быть созданы как объекты, а стандартные модули не могут. Поскольку существует только одна копия стандартных данных модуля, когда одна часть вашей программы изменяет общедоступную переменную в стандартном модуле, любая другая часть программы получает одно и то же значение, если она затем считывает эту переменную. Напротив, данные объекта существуют отдельно для каждого экземпляра объекта. Другое отличие состоит в том, что в отличие от стандартных модулей классы могут реализовывать интерфейсы.

Источник: http://msdn.microsoft.com/en-us/library/7825002w(en-US,VS.80).aspx

Ответ 5

На самом деле вы используете классы для создания объектов. Например, в следующем консольном приложении .NET r находится объект Rectangle:

Imports System

Public Class Rectangle

    Private length As Double
    Private width As Double

    'Public methods
    Public Sub AcceptDetails()
        length = 4.5
        width = 3.5
    End Sub

    Public Function GetArea() As Double
        GetArea = length * width
    End Function

    Public Sub Display()
        Console.WriteLine("Length: {0}", length)
        Console.WriteLine("Width: {0}", width)
        Console.WriteLine("Area: {0}", GetArea())
    End Sub

    Shared Sub Main()
        Dim r As New Rectangle()
        r.Acceptdetails()
        r.Display()
        Console.ReadLine()
    End Sub

End Class