В чем разница между модулем и классом?
При добавлении нового файла в проект VB.Net в Visual Studio мне предоставляется возможность как "класса", так и "модуля". Класс описывается как
An empty class file
Пока модуль описывается как
A file for storing groups of functions
Это означает, что модуль менее полезен для класса, поскольку класс может хранить группы функций и т.д.
Это тот случай, когда модуль представляет собой просто группу функций или есть больше для модуля, чем предполагает документация на визуальной студии?
Ответы
Ответ 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