Модули, структури и класове

Има само три начина за организиране на VB.NET приложение.

  • модули
  • структури
  • класове

Но повечето технически статии предполагат, че вече знаете всичко за тях. Ако сте един от многото, които все още имат няколко въпроса, можете просто да прочетете покрай объркващите битове и да се опитате да го разберете така или иначе. И ако имате a много от време, можете да започнете да търсите на Microsoft документация:

  • „Модулът е преносим изпълним файл, като type.dll или application.exe, състоящ се от един или повече класове и интерфейси.“
  • „Класният израз дефинира нов тип данни.“
  • "Структурата на структурата определя съставния тип стойност, който можете да персонализирате."

Добре тогава. Някакви въпроси?

За да бъдете малко по-справедливи към Microsoft, те имат страници и страници (и повече страници) с информация за всички тях, през които можете да проправите. И те трябва да бъдат възможно най-точни, защото задават стандарта. С други думи, документацията на Microsoft понякога се чете като правна книга, защото тя е правна книга.

instagram viewer

Но ако просто научавате .NET, това може да бъде много объркващо! Трябва да започнете някъде. Разбирането на трите основни начина, по които можете да пишете код във VB.NET, е доброто място за начало.

Можеш да пишеш VB.NET код, използвайки някоя от тези три форми. С други думи, можете да създадете a Приложение на конзолата във VB.NET Express и напишете:

Модул модул1
Sub Main ()
MsgBox ("Това е модул!")
Край Sub
Краен модул
Клас Клас1
Sub Main ()
MsgBox ("Това е клас")
Край Sub
Краен клас
Структура на структурата1
Dim myString като струнен
Sub Main ()
MsgBox ("Това е структура")
Край Sub
Крайна структура

Това не прави който и да е смисъл като програма, разбира се. Въпросът е, че не получавате синтактична грешка, така че това е "законно" VB.NET код.

Тези три форми са единственият начин да се кодира коренът на кралицата пчела на всички .NET: обекта. Единственият елемент, който прекъсва симетрията на трите форми, е изявлението: Dim myString като струнен. Това е свързано със структура, която е „съставен тип данни“, както Microsoft заявява в своето определение.

Друго, което трябва да се забележи е, че и трите блока имат a Sub Main () в тях. Обикновено се нарича един от най-основните принципи на OOP капсулиране. Това е ефектът на "черната кутия". С други думи, трябва да можете да третирате всеки обект независимо, което включва използване на идентично подпрограми, ако искате.

класове

Класовете са "правилното" място за започване, защото, като Microsoft отбелязва: „Класът е основен градивен елемент на обектно-ориентирано програмиране (OOP).“ Всъщност някои автори разглеждат модулите и структурите като просто специални видове класове. Един клас е по-обектно ориентиран, отколкото модул, защото е възможно представям с конкретни примери (направете копие на) клас, но не и модул.

С други думи, можете да кодирате ...

Форма за публичен клас1
Private Sub Form1_Load (_
ByVal подател като система. Обект, _
ByVal e като система. EventArgs) _
Работи с MyBase. натоварване
Dim myNewClass As Class1 = New Class1
myNewClass. ClassSub ()
Край Sub
Краен клас

(Акцентирането на класа е подчертано.)

Няма значение дали самият действителен клас, в случая, ...

Публична класа клас1
ПодкласSub ()
MsgBox ("Това е клас")
Край Sub
Краен клас

... е сам във файл или е част от същия файл с Form1 код. Програмата работи точно по същия начин. (Забележи това Form1 е и клас.)

Можете също така да напишете клас клас, който се държи много като модул, тоест, без да го инстанцира. Това се нарича a Споделено клас. Статията "Static" (тоест "Shared") срещу динамичните типове във VB.NET обяснява това много по-подробно.

Друг факт относно класовете също трябва да се има предвид. Потребители (свойства и методи) на класа съществуват само докато съществува инстанцията на класа. Името за това е определяне на обхвата. Това е обхват на инстанция на клас е ограничена. Кодът по-горе може да бъде променен, за да илюстрира тази точка по този начин:

Форма за публичен клас1
Private Sub Form1_Load (_
ByVal подател като система. Обект, _
ByVal e като система. EventArgs) _
Работи с MyBase. натоварване
Dim myNewClass As Class1 = New Class1
myNewClass. ClassSub ()
myNewClass = Нищо
myNewClass. ClassSub ()
Край Sub
Краен клас

Когато вторият myNewClass. ClassSub () изявление е изпълнено, a NullReferenceException грешка е хвърлена, защото ClassSub член не съществува

модули

В VB 6 беше обичайно да се виждат програми, при които по-голямата част от кода е в модул (A .BAS, файл, а не, например, в a форма файл като Form1.frm.) Във VB.NET и модулите, и класовете са в .VB файлове. Основната причина модулите са включени във VB.NET е да се даде възможност на програмистите да организират своите системи, като поставят код на различни места, за да прецизират обхвата и достъпа до техните код. (Тоест, колко дълго съществуват членовете на модула и какъв друг код може да препраща и използва членовете.) Понякога може да искате да поставите код в отделни модули, само за да улесните работата с тях.

Всички VB.NET модули са Споделено защото те не могат да бъдат инстанцирани (виж по-горе) и те могат да бъдат маркирани приятел или обществен така че те могат да бъдат достъпни или в рамките на една и съща сглобка, или всеки път, когато те се позовават.

структури

Структурите са най-малко разбрани от трите форми на обекти. Ако говорихме за "животни" вместо за "обекти", структурата щеше да бъде вид юж.-афр. мравояд.

Голямата разлика между структура и клас е, че структурата е a стойност стойност и клас е a референтен тип.

Какво означава това? Толкова се радвам, че попитахте.

Тип стойност е обект, който се съхранява директно в паметта. Една цяло число е добър пример за тип стойност. Ако сте обявили цяло число във вашата програма така ...

Dim myInt като цяло число = 10

... и сте проверили мястото на паметта, съхранено в Myint, ще намерите стойността 10. Виждате и това, описано като „разпределение в стека“.

Стекът и купчината са просто различни начини за управление на използването на компютърна памет.

Референтен тип е обект, в който местоположението на обекта се съхранява в паметта. Така че намирането на стойност за референтен тип винаги е търсене в две стъпки. А низ е добър пример за референтен тип. Ако сте декларирали низ като този ...

Dim myString като String = "Това е myString"

... и сте проверили мястото на паметта, съхранено в MyString, ще намерите друго място в паметта (наречено a показалка - този начин на правене на нещата е самото сърце на езиците в стил C). Ще трябва да отидете на това място, за да намерите стойността „This is myString“. Това често се нарича „разпределение на купчината“. Стека и купчината

Някои автори казват, че типовете стойности дори не са обекти и само референтни видове могат да бъдат обекти. Със сигурност е вярно, че сложните характеристики на обекта като наследяване и капсулиране са възможни само с референтни типове. Но започнахме цялата тази статия, като казахме, че има три форми за обекти, така че трябва да приема, че структурите са някакъв вид, дори и да са нестандартни обекти.

Програмният произход на структурите се връща към езици, ориентирани към файлове като Cobol. На тези езици данните обикновено се обработват като последователни плоски файлове. "Полетата" в запис от файла бяха описани от раздел "дефиниция на данни" (понякога наричан "оформление на записа" или "копирна книга"). Така че, ако запис от файла съдържа:

1234567890ABCDEF9876

Единственият начин да разберете, че „1234567890“ е телефонен номер, „ABCDEF“ е идентификационен номер и 9876 е 98,76 долара чрез дефиницията на данните. Структурите ви помагат да постигнете това във VB.NET.

Структура на структурата1
Затъмнете моя iPhone като струнен
Dim myID като String
Dim myAmount As String
Крайна структура

Защото a низ е референтен тип, необходимо е да се запази дължината еднаква с VBFixedString атрибут за записи с фиксирана дължина. Можете да намерите разширено обяснение на този атрибут и като цяло в статията Атрибути в VB .NET.

Въпреки че структурите са нестандартни обекти, те имат много възможности във VB.NET. Можете да кодирате методи, свойства и дори събития и манипулатори на събития в структури, но можете да използвате и по-опростен код и тъй като те са стойностни типове, обработката може да бъде по-бърза. Например, можете да прекодирате структурата по-горе така:

Структура на структурата1
Затъмнете моя iPhone като струнен
Dim myID като String
Dim myAmount As String
Sub mySub ()
MsgBox ("Това е стойността на myPhone:" & myPhone)
Край Sub
Крайна структура

И го използвайте по този начин:

Dim myStruct като структура1
myStruct.myPhone = "7894560123"
myStruct.mySub ()

Струва си да отделите време за малко да си поиграете със структури и да научите какво могат да правят. Те са един от странните кътчета на VB.NET, който може да бъде вълшебен куршум, когато имате нужда от него.

instagram story viewer