Visual Basic .NET Language
Introduktion till syntax
Sök…
kommentarer
Det första intressanta att veta är hur man skriver kommentarer.
I VB .NET skriver du en kommentar genom att skriva en apostrof eller skriva REM
. Detta betyder att resten av linjen inte kommer att beaktas av kompilatorn.
'This entire line is a comment
Dim x As Integer = 0 'This comment is here to say we give 0 value to x
REM There are no such things as multiline comments
'So we have to start everyline with the apostrophe or REM
Intellisense Helper
En intressant sak är förmågan att lägga till egna kommentarer i Visual Studio Intellisense. Så du kan göra dina egna skriftliga funktioner och klasser självförklarande. För att göra det måste du skriva kommentarsymbolen tre gånger raden ovanför din funktion.
När detta är gjort kommer Visual Studio automatiskt att lägga till en XML-dokumentation:
''' <summary>
''' This function returns a hello to your name
''' </summary>
''' <param name="Name">Your Name</param>
''' <returns></returns>
''' <remarks></remarks>
Public Function Test(Name As String) As String
Return "Hello " & Name
End Function
Efter det, om du skriver in din testfunktion någonstans i din kod, kommer denna lilla hjälp att dyka upp:
Förklara en variabel
I VB.NET måste varje variabel deklareras innan den används (Om Option Explicit är inställd på On ). Det finns två sätt att deklarera variabler:
- Inuti en
Function
eller enSub
:
Dim w 'Declares a variable named w of type Object (invalid if Option Strict is On)
Dim x As String 'Declares a variable named x of type String
Dim y As Long = 45 'Declares a variable named y of type Long and assigns it the value 45
Dim z = 45 'Declares a variable named z whose type is inferred
'from the type of the assigned value (Integer here) (if Option Infer is On)
'otherwise the type is Object (invalid if Option Strict is On)
'and assigns that value (45) to it
Se det här svaret för fullständig information om Option Explicit
, Strict
and Infer
.
- Inne i en
Class
eller enModule
:
Dessa variabler (även kallade fält i detta sammanhang) kommer att vara tillgängliga för varje instans av den Class
de deklareras i. De kan vara tillgängliga utanför den deklarerade Class
beroende på modifieraren ( Public
, Private
, Protected
, Protected Friend
or Friend
)
Private x 'Declares a private field named x of type Object (invalid if Option Strict is On)
Public y As String 'Declares a public field named y of type String
Friend z As Integer = 45 'Declares a friend field named z of type Integer and assigns it the value 45
Dessa fält kan också deklareras med Dim
men betydelsen ändras beroende på den bifogade typen:
Class SomeClass
Dim z As Integer = 45 ' Same meaning as Private z As Integer = 45
End Class
Structure SomeStructure
Dim y As String ' Same meaning as Public y As String
End Structure
modifierare
Modifierare är ett sätt att indikera hur externa objekt kan komma åt ett objekts data.
- offentlig
Betyder att alla objekt kan komma åt detta utan begränsningar
- Privat
Innebär att endast det deklarerande objektet kan komma åt och se detta
- Skyddade
Menar bara det deklarerande objektet och alla objekt som ärver från det kan komma åt och se detta.
- vän
Avser bara det delcaring-objektet, alla objekt som ärver från det och alla objekt i samma namnområde kan komma åt och se detta.
Public Class MyClass
Private x As Integer
Friend Property Hello As String
Public Sub New()
End Sub
Protected Function Test() As Integer
Return 0
End Function
End Class
Att skriva en funktion
En funktion är ett kodblock som kommer att anropas flera gånger under exekveringen. Istället för att skriva samma kod igen och igen, kan man skriva den här koden i en funktion och ringa den funktionen när den behövs.
En funktion :
- Måste deklareras i en klass eller en modul
- Returnerar ett värde (specificerat av returtypen)
- Har en modifierare
- Kan ta parametrar för att göra dess bearbetning
Private Function AddNumbers(X As Integer, Y As Integer) As Integer
Return X + Y
End Function
Ett funktionsnamn kan användas som returrätt
Function sealBarTypeValidation() as Boolean
Dim err As Boolean = False
If rbSealBarType.SelectedValue = "" Then
err = True
End If
Return err
End Function
är precis samma som
Function sealBarTypeValidation() as Boolean
sealBarTypeValidation = False
If rbSealBarType.SelectedValue = "" Then
sealBarTypeValidation = True
End If
End Function
Objektinitierare
Namngivna typer
Dim someInstance As New SomeClass(argument) With { .Member1 = value1, .Member2 = value2 '... }
Är ekvivalent med
Dim someInstance As New SomeClass(argument) someInstance.Member1 = value1 someInstance.Member2 = value2 '...
Anonyma typer (alternativet måste vara på)
Dim anonymousInstance = New With { .Member1 = value1, .Member2 = value2 '... }
Även om liknande
anonymousInstance
inte har samma typ somsomeInstance
Medlemsnamnet måste vara unikt i den anonyma typen och kan tas från en variabel eller ett annat objektmedlemsnamn
Dim anonymousInstance = New With { value1, value2, foo.value3 '... } ' usage : anonymousInstance.value1 or anonymousInstance.value3
Varje medlem kan föregås av nyckelordet
Key
. Dessa medlemmar kommer att varaReadOnly
egenskaper, de utan kommer att läsa / skriva egenskaperDim anonymousInstance = New With { Key value1, .Member2 = value2, Key .Member3 = value3 '... }
Två anonyma instanser definierade med samma medlemmar (namn, typ, närvaro av
Key
och ordning) kommer att ha samma anonyma typ.Dim anon1 = New With { Key .Value = 10 } Dim anon2 = New With { Key .Value = 20 } anon1.GetType Is anon2.GetType ' True
Anonyma typer är strukturellt jämställda. Två instanser av samma anonyma typer som har minst en
Key
egenskap med sammaKey
kommer att vara lika. Du måste användaEquals
metoden för att testa den, använda=
will not compile ochIs
kommer att jämföra objektreferensen.Dim anon1 = New With { Key .Name = "Foo", Key .Age = 10, .Salary = 0 } Dim anon2 = New With { Key .Name = "Bar", Key .Age = 20, .Salary = 0 } Dim anon3 = New With { Key .Name = "Foo", Key .Age = 10, .Salary = 10000 } anon1.Equals(anon2) ' False anon1.Equals(anon3) ' True although non-Key Salary isn't the same
Både namngivna och anonyma typer initialisering kan kapslas och blandas
Dim anonymousInstance = New With {
value,
Key .someInstance = New SomeClass(argument) With {
.Member1 = value1,
.Member2 = value2
'...
}
'...
}
Insamlingsinitierare
arrayer
Dim names = {"Foo", "Bar"} ' Inferred as String() Dim numbers = {1, 5, 42} ' Inferred as Integer()
Containers (
List(Of T)
,Dictionary(Of TKey, TValue)
, etc.)Dim names As New List(Of String) From { "Foo", "Bar" '... } Dim indexedDays As New Dictionary(Of Integer, String) From { {0, "Sun"}, {1, "Mon"} '... }
Är ekvivalent med
Dim indexedDays As New Dictionary(Of Integer, String) indexedDays.Add(0, "Sun") indexedDays.Add(1, "Mon") '...
Objekt kan vara resultatet av en konstruktör, ett metodsamtal, en tillgång till egendom. Det kan också blandas med Objektinitierare.
Dim someList As New List(Of SomeClass) From { New SomeClass(argument), New SomeClass With { .Member = value }, otherClass.PropertyReturningSomeClass, FunctionReturningSomeClass(arguments) '... }
Det är inte möjligt att använda syntax för objektinitierare OCH samlingsinitieringssyntax för samma objekt på samma gång. Till exempel fungerar dessa inte
Dim numbers As New List(Of Integer) With {.Capacity = 10} _ From { 1, 5, 42 } Dim numbers As New List(Of Integer) From { .Capacity = 10, 1, 5, 42 } Dim numbers As New List(Of Integer) With { .Capacity = 10, 1, 5, 42 }
Anpassad typ
Vi kan också tillåta samlingsinitieringssyntax genom att tillhandahålla en anpassad typ.
Det måste implementeraIEnumerable
och ha en tillgänglig och kompatibel med överbelastningsreglerAdd
metod (instans, delad eller till och med förlängningsmetod)Frivilligt exempel:
Class Person Implements IEnumerable(Of Person) ' Inherits from IEnumerable Private ReadOnly relationships As List(Of Person) Public Sub New(name As String) relationships = New List(Of Person) End Sub Public Sub Add(relationName As String) relationships.Add(New Person(relationName)) End Sub Public Iterator Function GetEnumerator() As IEnumerator(Of Person) _ Implements IEnumerable(Of Person).GetEnumerator For Each relation In relationships Yield relation Next End Function Private Function IEnumerable_GetEnumerator() As IEnumerator _ Implements IEnumerable.GetEnumerator Return GetEnumerator() End Function End Class ' Usage Dim somePerson As New Person("name") From { "FriendName", "CoWorkerName" '... }
Om vi ville lägga till Person-objekt i en
List(Of Person)
genom att bara sätta namnet i samlingsinitieraren (men vi kan inte ändra klassen Lista (av person)) kan vi använda en förlängningsmetod' Inside a Module <Runtime.CompilerServices.Extension> Sub Add(target As List(Of Person), name As String) target.Add(New Person(name)) End Sub ' Usage Dim people As New List(Of Person) From { "Name1", ' no need to create Person object here "Name2" }