Moduły, struktury i klasy

Organizacja aplikacji 101 – podstawy

Kobieta pisze na klawiaturze komputera

Siri Stafford/Digital Vision/Getty Images





Są tylko trzy sposoby na zorganizowanie a VB.NET aplikacja.

  • Moduły
  • Struktury
  • Klasy

Jednak większość artykułów technicznych zakłada, że ​​wiesz już o nich wszystko. Jeśli jesteś jednym z wielu, którzy wciąż mają kilka pytań, możesz po prostu przejrzeć mylące fragmenty i spróbować je rozwiązać. A jeśli masz działka czasu, możesz rozpocząć wyszukiwanie Microsoft dokumentacja:



  • „Moduł to przenośny plik wykonywalny, taki jak type.dll lub application.exe, składający się z jednej lub więcej klas i interfejsów”.
  • 'Oświadczenie Class definiuje nowy typ danych.'
  • 'Instrukcja Structure definiuje złożony typ wartości, który można dostosować.'

W takim razie dobrze. Jakieś pytania?

Aby być bardziej uczciwym wobec Microsoftu, mają strony i strony (i więcej stron) z informacjami na temat wszystkich tych informacji, przez które możesz przebrnąć. I muszą być tak dokładne, jak to tylko możliwe, ponieważ wyznaczają standardy. Innymi słowy, dokumentację Microsoftu czasami czyta się jak książkę prawniczą, ponieważ… jest książka prawnicza.



Ale jeśli dopiero uczysz się .NET, może to być bardzo mylące! Musisz gdzieś zacząć. Zrozumienie trzech podstawowych sposobów pisania kodu w VB.NET to dobry początek.

Możesz pisać VB.NET kod przy użyciu dowolnej z tych trzech form. Innymi słowy, możesz stworzyć Aplikacja konsoli w VB.NET Express i napisz:

Moduł Moduł 1
Podrzędna główna()
MsgBox('To jest moduł!')
Napis końcowy
Moduł końcowy
Klasa Klasa 1
Podrzędna główna()
MsgBox('To jest klasa')
Napis końcowy
Koniec klasy
Struktura struktury1
Dim myString As String
Podrzędna główna()
MsgBox('To jest struktura')
Napis końcowy
Koniec struktury

To nie czyni każdy sens jako program, oczywiście. Chodzi o to, że nie dostajesz błędu składni, więc jest to „legalne” Kod VB.NET .



Te trzy formy są jedynym sposobem na zakodowanie korzenia pszczół królowej całego .NET: obiektu. Jedynym elementem, który przerywa symetrię trzech form, jest stwierdzenie: Dim myString As String . Ma to związek z tym, że Struktura jest „złożonym typem danych”, jak stwierdza Microsoft w swojej definicji.

Inną rzeczą, na którą należy zwrócić uwagę, jest to, że wszystkie trzy bloki mają Podrzędna główna() w nich. Jedną z najbardziej podstawowych zasad OOP jest zwykle nazywana kapsułkowanie . To jest efekt „czarnej skrzynki”. Innymi słowy, powinieneś być w stanie traktować każdy obiekt niezależnie, co obejmuje używanie identycznie nazwanych podprogramów, jeśli chcesz.



Klasy

Zajęcia są „właściwym” miejscem do rozpoczęcia, ponieważ, jak Microsoft zauważa: „Klasa jest podstawowym elementem programowania obiektowego (OOP).” W rzeczywistości niektórzy autorzy traktują moduły i struktury jako specjalne rodzaje klas. Klasa jest bardziej zorientowana obiektowo niż moduł, ponieważ można: instancja (zrób kopię) klasy, ale nie modułu.

Innymi słowy, możesz kodować ...



Formularz klasy publicznej 1
Prywatny formularz podrzędny1_Load( _
ByVal nadawca Jako System.Object, _
ByVal e As System.EventArgs) _
Obsługuje MyBase.Load
Dim myNewClass As Class1 = Nowa klasa1
mojaNowaKlasa.KlasaSub()
Napis końcowy
Koniec klasy

(Podkreślono tworzenie instancji klasy).



Nie ma znaczenia, czy sama klasa, w tym przypadku, ...

Klasa publiczna Klasa 1
PodklasaSub()
MsgBox('To jest klasa')
Napis końcowy
Koniec klasy

... znajduje się w samym pliku lub jest częścią tego samego pliku z Formularz 1 kod. Program działa dokładnie w ten sam sposób. (Zauważ, że Formularz 1 to też klasa.)

Możesz także napisać kod klasy, który zachowuje się podobnie do modułu, to znaczy bez tworzenia jego instancji. Nazywa się to Wspólny klasa. Artykuł „Statyczny” (czyli „Udostępniony”) a typy dynamiczne w VB.NET wyjaśnia to bardziej szczegółowo.

Należy również pamiętać o innym fakcie dotyczącym zajęć. Członkowie (właściwości i metody) klasy istnieją tylko wtedy, gdy istnieje instancja klasy. Nazwa tego to scoping . To jest zakres instancji klasy jest ograniczona. Powyższy kod można zmienić, aby zilustrować ten punkt w ten sposób:

Formularz klasy publicznej 1
Prywatny formularz podrzędny1_Load( _
ByVal nadawca Jako System.Object, _
ByVal e As System.EventArgs) _
Obsługuje MyBase.Load
Dim myNewClass As Class1 = Nowa klasa1
mojaNowaKlasa.KlasaSub()
mojaNowaKlasa = Nic
mojaNowaKlasa.KlasaSub()
Napis końcowy
Koniec klasy

Kiedy drugi mojaNowaKlasa.KlasaSub() instrukcja jest wykonywana, a NullReferenceException zgłaszany jest błąd, ponieważ KlasaSub członek nie istnieje.

Moduły

W VB 6 często można było zobaczyć programy, w których większość kodu znajdowała się w module (A .NA DÓŁ , plik zamiast na przykład w a Formularz plik taki jak Form1.frm .) W VB.NET zarówno moduły, jak i klasy są w .VB akta. Głównym powodem, dla którego moduły są zawarte w VB.NET, jest umożliwienie programistom zorganizowania ich systemów poprzez umieszczenie kodu w różnych miejscach w celu dostrojenia zakresu i dostępu do ich kod . (Oznacza to, jak długo istnieją elementy członkowskie modułu i jaki inny kod może odwoływać się do elementów członkowskich i ich używać). Czasami możesz chcieć umieścić kod w oddzielnych modułach, aby ułatwić pracę.

Wszystkie moduły VB.NET są Wspólny ponieważ nie można ich utworzyć (patrz wyżej) i można je oznaczyć Przyjaciel lub Publiczny dzięki czemu można uzyskać do nich dostęp w ramach tego samego zestawu lub za każdym razem, gdy występuje do nich odwołanie.

Struktury

Struktury są najmniej rozumiane spośród trzech form obiektów. Gdybyśmy mówili o „zwierzętach” zamiast o „przedmiotach”, struktura byłaby Aardvark .

Duża różnica między strukturą a klasą polega na tym, że struktura jest typ wartości a klasa to typ referencyjny .

Co to znaczy? Tak się cieszę, że zapytałeś.

Typ wartości to obiekt, który jest przechowywany bezpośrednio w pamięci. jakiś Liczba całkowita jest dobrym przykładem typu wartości. Jeśli zadeklarowałeś Liczba całkowita w twoim programie takim jak ten...

Dim myInt jako liczba całkowita = 10

... i sprawdziłeś lokalizację pamięci zapisaną w myInt , znajdziesz wartość 10. Widzisz to również jako „przydzielanie na stosie”.

Stos i sterta to po prostu różne sposoby zarządzania wykorzystaniem pamięci komputera.

Typ referencyjny to obiekt, w którym lokalizacja obiektu jest przechowywana w pamięci. Zatem znalezienie wartości dla typu referencyjnego jest zawsze wyszukiwaniem dwuetapowym. A Strunowy jest dobrym przykładem typu referencyjnego. Jeśli zadeklarowałeś Strunowy lubię to ...

Dim myString as String = 'To jest myString'

... i sprawdziłeś lokalizację pamięci zapisaną w mójciąg , znajdziesz inną lokalizację pamięci (zwaną a wskaźnik - ten sposób robienia rzeczy jest sercem języków w stylu C). Musiałbyś udać się do tej lokalizacji, aby znaleźć wartość „This is myString”. Nazywa się to często „alokacją na stercie”. Stos i sterta

Niektórzy autorzy twierdzą, że typy wartości nie są nawet obiektami i tylko typy referencyjne mogą być obiektami. Z pewnością prawdą jest, że wyrafinowane cechy obiektu, takie jak dziedziczenie i kapsułkowanie są możliwe tylko w przypadku typów referencyjnych. Ale zaczęliśmy cały ten artykuł od stwierdzenia, że ​​istnieją trzy formy obiektów, więc muszę zaakceptować, że struktury są pewnego rodzaju obiektami, nawet jeśli są obiektami niestandardowymi.

Początki programowania struktur sięgają do języków zorientowanych na pliki, takich jak Cobol. W tych językach dane były zwykle przetwarzane jako sekwencyjne pliki proste. „Pola” w rekordzie z pliku zostały opisane przez sekcję „definicji danych” (czasami nazywaną „układem rekordu” lub „zeszytem”). Tak więc, jeśli rekord z pliku zawierał:

1234567890ABCDEF9876

Jedynym sposobem, aby wiedzieć, że „1234567890” był numer telefonu, „ABCDEF” to identyfikator, a 9876 to 98,76 USD, to definicja danych. Struktury pomagają to osiągnąć w VB.NET.

Struktura Struktura1
Przyciemnij myPhone jako ciąg
Dim myID As String
Dim myAmount As String
Koniec struktury

Ponieważ Strunowy jest typem referencyjnym, należy zachować tę samą długość z VBFixedString atrybut dla rekordów o stałej długości. Rozszerzone wyjaśnienie tego atrybutu i ogólnych atrybutów można znaleźć w artykule Atrybuty w VB .NET .

Chociaż struktury są obiektami niestandardowymi, mają wiele możliwości w VB.NET. Możesz kodować metody, właściwości, a nawet zdarzenia i programy obsługi zdarzeń w strukturach, ale możesz również użyć bardziej uproszczonego kodu, a ponieważ są to typy wartości, przetwarzanie może być szybsze. Na przykład możesz przekodować powyższą strukturę w ten sposób:

Struktura Struktura1
Przyciemnij myPhone jako ciąg
Dim myID As String
Dim myAmount As String
Sub mySub()
MsgBox('To jest wartość myPhone: ' & myPhone)
Napis końcowy
Koniec struktury

I użyj go w ten sposób:

Przyciemnij moją strukturę jako strukturę1
mojaStruktura.mojTelefon = '7894560123'
mojaStruktura.mojaSub()

Warto poświęcić trochę czasu, aby pobawić się strukturami i dowiedzieć się, co potrafią. Są jednym z dziwnych zakątków VB.NET, które mogą być magiczną kulą, gdy jej potrzebujesz.