Има само три начина за организиране на VB.NET приложение.
- модули
- структури
- класове
Но повечето технически статии предполагат, че вече знаете всичко за тях. Ако сте един от многото, които все още имат няколко въпроса, можете просто да прочетете покрай объркващите битове и да се опитате да го разберете така или иначе. И ако имате a много от време, можете да започнете да търсите на Microsoft документация:
- „Модулът е преносим изпълним файл, като type.dll или application.exe, състоящ се от един или повече класове и интерфейси.“
- „Класният израз дефинира нов тип данни.“
- "Структурата на структурата определя съставния тип стойност, който можете да персонализирате."
Добре тогава. Някакви въпроси?
За да бъдете малко по-справедливи към Microsoft, те имат страници и страници (и повече страници) с информация за всички тях, през които можете да проправите. И те трябва да бъдат възможно най-точни, защото задават стандарта. С други думи, документацията на Microsoft понякога се чете като правна книга, защото тя е правна книга.
Но ако просто научавате .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
Крайна структура
Защото a низ е референтен тип, необходимо е да се запази дължината еднаква с VBFixedString атрибут за записи с фиксирана дължина. Можете да намерите разширено обяснение на този атрибут и като цяло в статията Атрибути в VB .NET.
Въпреки че структурите са нестандартни обекти, те имат много възможности във VB.NET. Можете да кодирате методи, свойства и дори събития и манипулатори на събития в структури, но можете да използвате и по-опростен код и тъй като те са стойностни типове, обработката може да бъде по-бърза. Например, можете да прекодирате структурата по-горе така:
Структура на структурата1
Sub mySub ()
MsgBox ("Това е стойността на myPhone:" & myPhone)
Край Sub
Крайна структура
И го използвайте по този начин:
Dim myStruct като структура1
myStruct.myPhone = "7894560123"
myStruct.mySub ()
Струва си да отделите време за малко да си поиграете със структури и да научите какво могат да правят. Те са един от странните кътчета на VB.NET, който може да бъде вълшебен куршум, когато имате нужда от него.