När man skapar en procedur som ska ha parametrar som är både tvingande och frivilliga (Optional) måste de frivilliga stå sist. >När man skapar en procedur som ska ha parametrar som är både tvingande och frivilliga (Optional) måste de frivilliga stå sist. >>När man skapar en procedur som ska ha parametrar som är både tvingande och frivilliga (Optional) måste de frivilliga stå sist. :D Jag rörde ihop ParamArray med optional ;) Att lägga alla optional-parametrar sist är definitivt ett krav från kompilatorn såvida man inte använder named arguments. Betrakta följande funktionsdeklaration : Men man skulle kunna ha löst det precis som i VB 6 ändå. >Tralala("Per",33) Eftersom rutinen har en deklaration så kommer den hantera data efter denna.Vore tacksam för lite argumentation för eller emot följande påståenden
I VB.NET behöver man inte tänka på minnesläckage.
I ett VB-program som ska skriva till fil behöver man inte importera System.IO men gör det för tydlighetens skull.
Man kan endast skriva VB-program i IDE:n Microsoft Visual Studio.NETSv: Vore tacksam för lite argumentation för eller emot följande påståenden
Stämmer bra; hur ska annars kompilatorn veta vad som är frivilligt eller ett måste?
>I VB.NET behöver man inte tänka på minnesläckage.
Stämmer också bra; men man ska inte tok-skapa objekt för det. Likaså bör man anropa .Dispose på de objekt som har den funktionen pga. att programmet kan ha kvar en massa roliga win32-objekt å annat unmanaged i minnet. De kommer dock att rensas bort så småingom av GC men man vet aldrig när.
>I ett VB-program som ska skriva till fil behöver man inte importera System.IO men gör det för tydlighetens skull.
Nja; vad är för tydlighetens skulle för dig? För att markera att den ska skriva till fil? Det finns en massa saker i System.IO som inte har med filer att göra som används.
>Man kan endast skriva VB-program i IDE:n Microsoft Visual Studio.NET
Nej; vb<b>.NET</b> program kan skrivas överallt där man har tillgång till en kompilator (vbc.exe, finns alltid i %windir%\Microsoft.NET\Framework\%version%), men det är smidigare om man har en utvecklingsmiljö.Sv: Vore tacksam för lite argumentation för eller emot följande påståenden
>Stämmer bra; hur ska annars kompilatorn veta vad som är frivilligt eller ett måste?
Argument som använder "Optional" är frivilliga och de som inte använder "Optional" är tvingande. Det borde väl inte vara nåt problem för en kompilator. Sen finns det ju en restriktion i .net som säger att om man använder "Optional" så måste alla efterföljande argument också ha "Optional" men det har knappast nåt med kompilatorn att göra. Snarare är det nog arvet från c++/c# som spelar in eftersom man där inte kan hoppa över argument (MsgBox "meddelande", , "dialogtitel") eller ha namngivna argument (MsgBox Prompt:="meddelande", Title:="dialogtitel") som i VBSv: Vore tacksam för lite argumentation för eller emot följande påståenden
Sv: Vore tacksam för lite argumentation för eller emot följande påståenden
Public Sub Tralala(ByVal Name As String, Optional ByVal Age As Long, Byval Length As Long)
Om du anropar denna med :
Tralala("Per",33)
Är då 33 åldern eller längden?
Genom att kräva att alla optional ligger sist så undviker man tvetydigheter.
Sv: Vore tacksam för lite argumentation för eller emot följande påståenden
Alltså att om man utelämnar ett optional argument så gör man plats för det, men skriver inte ut det;
Tralala("Per", ,33)Sv: Vore tacksam för lite argumentation för eller emot följande påståenden
Att lägga alla Optional i slutet skulle väl inte lösa problemet...
<code>
Public Sub Tralala(ByVal Name As String, ByVal Age As Long, Optional ByVal Length As Long, Optional ByVal IQ As Long)
</code>
Om man nu skriver:
<code>
Tralala "Per", 33, 200
</code>
Är Per då lång eller smart?
ThomasSv: Vore tacksam för lite argumentation för eller emot följande påståenden
Det vill säga: Om en parametar inte angavs, ingoreras det eftersom nyckelordet optional användes, om däremot optional änvändes som ovan tar rutinen emot första värdet (Ålder) förstås i följande sats:
Tralala("Per",33)
<code>
Public Sub Tralala(ByVal Name As String, ByVal Age As Long, Optional ByVal Length As Long, Optional ByVal IQ As Long)
</code>
Personen heter Per och är 33 år gammal.