Jaka jest różnica między modułem a klasą?


Dodając nowy plik do projektu VB.Net w programie Visual Studio, pojawia się opcja użycia zarówno „Class”, jak i „Module”. Klasa jest opisana w następujący sposób
An empty class file

Natomiast moduł jest opisany jako
A file for storing groups of functions

Wydaje się to oznaczać, że moduł jest mniej przydatny niż klasa, ponieważ klasa może przechowywać grupy funkcji i nie tylko.
Czy moduł to naprawdę tylko grupa funkcji, czy też moduł zawiera coś więcej, niż sugeruje dokumentacja Visual Studio?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Klasa -


to jest ten typ. Możesz używać tego typu jak każdego innego typu (
String
,
Integer
,
Date
,
FileInfo
...)) deklarowanie zmiennych, parametrów, właściwości i typów zwracanych.
Podajmy mały przykład:
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

Teraz możesz zadeklarować zmienne typu
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

Podczas

moduły

statyczny. To znaczy. Dane przechowywane w module istnieją dokładnie raz. Z drugiej strony nie musisz tworzyć instancji modułu z
New
, więc są one często używane do przechowywania danych globalnych i metod, które są globalnie dostępne. Na przykład możesz przechowywać listę osób w module.
Ćwicząc, można zrobić o wiele więcej. Możesz wyprowadzić klasę z klasy bazowej. Ta nowa klasa dziedziczy wszystko z klasy bazowej i może dodawać do niej więcej rzeczy. Na przykład możesz wyprowadzić klasę
Employee
z
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

Słowo kluczowe
Overridable
w
Person.Print
umożliwia klasom pochodnym przesłanianie (przesłanianie) metody
Print
. (Funkcje i podsystemy w klasach nazywane są metodami).
Pracownicy są zgodnymi osobami. Możesz dodać pracownika do listy
people
. Nie wymaga to żadnych zmian w pętli For Each, tzn. Wywołanie
person.Print ()
automatycznie wywoła poprawną metodę
Print
(pierwszą dla "normalnej" osoby a drugi dla personelu).
Dim emp as Employeeemp = New Employee()
emp.FirstName = "Frank"
emp.LastName = "Taggart"
emp.Salary = 3500.00Dpersons.Add(emp)

O zajęciach można powiedzieć znacznie więcej. Mam nadzieję, że masz pojęcie o tym, co możesz zrobić z zajęciami.
Patrz sekcja

Obiekty i klasy w Visual Basic
https://docs.microsoft.com/en- ... sses/
a zwłaszcza sekcja

różnice między klasami i modułami
https://docs.microsoft.com/en- ... dules
.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Moduł to nic innego jak inna nazwa klasy statycznej.

To wszystko przez krótki czas.

Jeśli w to nie wierzysz, skompiluj moduł za pomocą VB.NET i zdekompiluj z ILSpy przy użyciu C-Sharp.


I tak, to znaczy, że masz rację, jeśli chodzi o funkcjonalność, moduł jest klasą SUBset.

Wynika z tego, że z punktu widzenia funkcjonalności klasa jest SUPERzbiorem modułu, ponieważ może zawierać zarówno metody statyczne, jak i niestatyczne & amp; zmienne, a także modyfikatory zapewniające wirtualny i bezpieczny dostęp.

Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Klasa jest bardziej jednostką, a moduł jest zasadniczo luźnym zbiorem rzeczy, takich jak funkcje, zmienne, a nawet klasy.
W module publicznym klasy projektów mają dostęp do funkcji i zmiennych modułu. Nie musisz podawać nazwy modułu, aby się do niego odwołać. Możesz również mieć zajęcia w module.
Zmienne i funkcje klasy znajdują się w trudniejszej klasie „własności”. Publiczne zmienne i funkcje (metody) używane przez inne klasy są używane z nazwą klasy:
classname.method
, w przeciwieństwie do tych używanych w modułach.
Istnieje tylko jedno wystąpienie modułu, ale jedno lub więcej wystąpień klasy może być używanych w tym samym czasie.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Główna różnica między klasami i modułami polega na tym, że klasy mogą być tworzone jako obiekty, podczas gdy standardowe moduły nie mogą. Ponieważ istnieje tylko jedna kopia danych modułu standardowego, kiedy jedna część programu modyfikuje zmienną publiczną w module standardowym, każda inna część programu otrzymuje tę samą wartość, jeśli następnie odczytuje tę zmienną. Natomiast dane opisowe istnieją osobno dla każdego wystąpienia obiektu. Inną różnicą jest to, że w przeciwieństwie do standardowych modułów, klasy mogą implementować interfejsy.

Źródło:

http://msdn.microsoft.com/en-us/ library/7825002w(en-US, VS.80).aspx
http://msdn.microsoft.com/en-us/library/7825002w(en-US,VS.80).aspx
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

W rzeczywistości używasz klas do tworzenia obiektów. Na przykład w następującej aplikacji konsoli .NET
r
jest obiektem
Rectangle
:
Imports SystemPublic 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 SubEnd Class

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się