אחד השימושים הנפוצים הוא להגדיר מערך או ליסט של structure היוצרים למעשה UDT (User Defined Types)- שהוא למעשה טבלת משתמש בזיכרון. השימוש במבנה מאפשר לנהל רשומות בזיכרון, וגם לשמור ולקרוא אותם מקובץ באופן קל ופשוט. אפשר גם ליצור מבנים מורכבים יותר, שבו מבנה אחד יכלול מבנה אחר.
Private BookData(12) As BookType
BookData(0).Title = "The Catcher in the Rye"
BookData(0).URL = "http://en.wikipedia.org/wiki/The_Catcher_in_the_Rye"
בדוגמה נוצר מערך בשם BookData של המבנה BookType. ומודגמת בו פעולת השמה של מחרוזת, למשתנה URL של האיבר הראשון במערך. ניתן לשמור ולקרוא מקובץ מבנה או מערך של מבנים, באמצעות פקודות השמירה והקריאה לקובץ של VB.NET.
פונקציה ושגרה.
מבני הקוד הבסיסיים הם שגרות ופונקציות. מבנים אלו מכילים למעשה את קטעי הקוד להוראה. הם יכולים להיות מוכלים במודלים או במחלקות. ההבדל בין שגרה (Sub) לבין פונקציה (Function), הוא בכך ששגרה מכילה קטע ביצוע מבלי להחזיר ערך, ואילו פונקציה מבצעת קטע ביצועי ומחזירה ערך, ולכן יכולה להיות מושמת למשתנה באמצעות אופרטור =, או להיות כלולה בתחביר תנאי לוגי. צורת החזרת הערך שנעשתה באמצעות השמה לשם הפונקציה ב-VB6, שונתה בשפה זו ונעשית באמצעות פקודת Return כמקובל. יתרון השיטה הזו שבמקרה שמשנים את שם הפונקציה, אין מקומות נוספים שצריך לשנות, דבר מסורבל שבגרסאות שקדמו לדוט נט גרם לשגיאות הרצה.
שני המבנים יכולים לקבל פרמטרים. הפרמטרים כבררת מחדל יהיו לפי ערך (ByVal), אך אפשר גם שהפרמטר יהיה מצביע (באמצעות שימוש במילה השמורה ByRef). אפשר להפוך פרמטר שיהיה אופציונלי (באמצעות המילה Optional) לפני שם הפרמטר, ואז חובה לתת לפרמטר ערך ברירת מחדל. אפשרות נוספת היא לתת בפרמטר מערך באמצעות המילה השמורה ParamArray. אפשר גם לשלוח כפרמטר פונקציה שמחזירה אותו סוג טיפוס של הפרמטר.
[modifiers] Sub SubName[(parameterlist)]
End Sub
[modifiers] Function FunctioName[(parameterlist)] As returntype
End Function
טופס.
הטופס הוא רכיב ממשק המשתמש המרכזי באפליקציה שולחנית. הוא מהווה רכיב מכולה ואוסף גם יחד, תפקידו המרכזי להכיל בתוכו פקדים. אף שהוא למעשה כיום מקרה פרטי של מחלקה, נותר אחד המחלקות הבסיסיות והחשובות של השפה. ב-VisualBasic.NET נשמרה והורחבה התפיסה, שהתכנות מתחיל בשלב הוויזואלי בשרטוט וארגון הפקדים על הטופס באמצעות העכבר, הגדרת תכונותיהם בגיליון המאפיינים, ומשם ממשיך לכיוון הקוד, בניגוד לשפות אחרות שמתחילות בקוד מיד.
הטופס הפך להיות גמיש יותר ומרובה תכונות, ופונקציונליות שהושגה לפני כן באמצעות קריאות לפונקציות מערכת, או באמצעות חישובים מדוקדקים, הוטמעה במחלקת הטופס, כך למשל מיקום דינמי של פקדי טופס נעשה קל ופשוט. הוספו מספר רב של פקדים נוספים בתחומים שונים, והוספו מספר רב של תבניות טפסים. השילוב של הטופס ופקדיו עם תכנות מונחה עצמים, מרחיב את הגמישות של הפיתוח, ומאפשר ליצור טפסים על בסיס הטופס המשתמש, ולרשת ממנו את תכונותיו. באופן זה אפשר לשנות את הממשק של כל טופסי היישום, בשינוי טופס הבסיס בלבד. כן ניתן להרחיב תכונות של פקדים או טופסי מערכת.
החלוקה בין פקדי ממשק לרכיבים שתפקידם לבצע פעולות מאחורי הקלעים (כמו למשל timer), נעשתה ברורה יותר (הם מופיעים באזור מיוחד בתחתית המסך). בפקדים עצמם יכולות שהיו קיימות רק בתכנות, הוספו למבט עיצוב. הגמישות בטיפול בפקדים עצמה הוגדלה, ואפשר לטפל בפקדים כמו במשתנים, דבר שלא היה קיים בגרסת ה-VB6. כל הפקדים קיבלו שיטות גרפיות רבות, שלפני כן היו רק לפקד תמונה, וכעת אפשר לצייר אפילו על פקד Label שנחשב לפקד הבסיסי והנחות ביותר.
הקשר בין פקד לאירועיו חוזק, ושינוי שמו של פקד, כבר איננו מנתק את הקשר לאירועים שלו, דבר שהיווה בעיה לא קטנה בגרסת VB6. מאידך האפשרות ליצור אוסף פקדים, באופן שיהיה אפשר להתייחס לפקדים כמו למערך הוסרה מברירת המחדל, וממומשת רק כתוספת תואמת לגרסאות הקודמות, בצורת פקדים מיוחדים, שמסורבל כיום לתפעל אותם מבעבר.
בנוסף לטופס של יישומי חלונות (WinForm), הוסף טופס גרפי מתקדם Window ביישום של WPF, וכן קיים טופס של יישומי אינטרנט (WebForm), שמאפשר ליצור יישומי אינטרנט באופן דומה ליישומי חלונות. (דבר שיושם באופן ממצה במחולל האתרים של הקוד הפתוח DotNetNuke). כמו כן הוסף טופס להתקנים ניידים.
פקודות בסיסיות.
אופרטורים.
בנוסף לאופרטורים האריתמטיים הרגילים כמו -,/,+,-,*,^,\, ו-MOD
משתנים.
השפה כוללת את כל טיפוסי המשתנים הרגילים: בוליאני (Boolean), מספר שלם (Byte, Short, Integer, Long, Decimal), נקודה צפה (Single, Double), תו (Char), ומחרוזת (String = המסוגלת להכיל עד 2 מיליארד תווי יוניקוד). כמו כן ניתן להגדיר מספרים שלמים חיובים (UShort, UInteger, ULong). קיימים גם טיפוס תאריכי (Date), ואובייקט (Object) שהוא משתנה רב תכליתי, המסוגל להכיל מגוון רחב של טיפוסים. (משתנה זה מחליף את משתנה Variant של VB, וסוג הטיפוס שלו משתנה בהתאם לערך שהושם בו. כלומר: אם בשורה הראשונה יושם בו מספר שלם הוא יהיה מסוג integer ואם בשורה השנייה תושם בו מחרוזת הוא יהפוך לטיפוס String).
המשתנים הפכו למעשה להיות אובייקטים. ניתן כמובן להכריז ולהשתמש בהם בדרך הרגילה:
Dim String1 As String = OpenFileDialog.FileName
אבל ניתן לעשות הרבה יותר. ניתן להגדיר משתנה ולאתחל את ערכו כשם שעושים באובייקט. למשל אפשר ליצור משתנה מחרוזת שיהיו בו 500 כוכביות, באמצעות הביטוי הבא:
Dim string1 As New String("*", 500)
מכיוון שהם למעשה אובייקטים. למשתנים יש מתודות שמיוחדות לפי כל משתנה. שוב אין צורך לחפש את שם הפונקציה ולבדוק האם היא פועלת על טיפוס המשתנה שהוכרז או מחזירה שגיאה. לאחר כתיבת המשתנה מקלידים נקודה ומקבלים את כל הפונקציות הפועלות על המשתנה. דוגמה שממחישה את הדבר, היא הבדיקה האם התו השלישי במחרוזת הוא "A", ניתנת להיעשות בדרך הבאה:
String1.Substring(3, 1).Equals("A") = True
מערכים.
כמו ב-VB ניתן להגדיר מערך הן בגודל קבוע מראש (בהגדרת מספר האיברים שבו), והן בגודל משתנה במהלך הריצה (בהקצאה דינמית באמצעות פקודת ReDim) עם אופציה לשמירת הנתונים שכבר קיימים בו. (הגישה לאיברים תהיה באמצעות אינדקס בתוך סוגריים עגולים).
ניתן להגדיר בשפה מערך משונן (jagged array), שהוא למעשה מערך של מערכים, ונועד להכיל בתוכו מערכים בגדלים משתנים.
בנוסף לכל המשתנים הרגילים ובנוסף לטיפוס מערך Array שכבר כולל אפשרויות של מיון וחיפוש שמובנים בו, הוספה מחלקת אוספים (Collections) שמטפלת במשתנים מורכבים: Hashtable, ArrayList, BitArray, CollectionBase, SortedList, DictionaryBase, אוספי מחסנית ועוד, ובגרסה 2 - גרסה גנרית של ArrayList בשם List. למבנים מורכבים אלו יכולות שונות ומשונות לטיפול חכם בנתונים, כמו טיפול במספר איברים בבת אחת, מיון, חיפוש בינארי ועוד, והם פועלים למעשה כמו רשימות מקושרות, כאשר כל הטיפול בזיכרון נעשה מאחורי הקלעים. תפיסה זו של אוספים שהייתה כבר קיימת ב-VB6 הורחבה ושוכללה לסביבת הדוט נט כולה. ניתן ליצור מערכים או LIST לא רק של משתנים פרימיטיביים אלא אף של מחלקות כמו למשל מחלקה של טופס מסוים.
מבני בקרה.
השפה כוללת מבנה בקרה מסוגים שונים. מבנה הבקרה הם פקודות שמאפשרות שליטה על זרימת הקוד. באופן עקרוני מבנה הבקרה בגרסת הדוט נט נותרו זהים לגרסאות הקודמת.
מבני תנאי.
תנאי If.
מבנה התנאי נשאר בתחביר זה לגרסה הקודמת. אפשר ליצור פקודות IF מקוננות אחת בתוך השנייה.
If condition Then
statements
[ElseIf condition Then
statements ]
[Else
statements ]
End If
תנאי Select Case.
מבנה זה מאפשר לכתוב מספר של פקודות תנאי שרק אחת יכולה להתקיים. במקרה שמקרה מתקיים, מבוצעת הפקודה שלו, ולאחר מכן מתבצעת יציאה ממנו. זוהי פקודה גמישה מאוד שמנצלת את יתרונות השפה. כך שניתן לשים גם קבועים, גם ביטויים ואף פונקציות. ניתן גם לערבב באותו משפט גם משתנים מטיפוסים שונים כמו מספרי ומחרוזתי ביחד. גם אין צורך לרשום Break בסוף כל Case כפי שקיים בשפות כדוגמת C ו-#C, תתבצע הפסקה אוטומטית ודילוג לסוף ה-Case בסיום ביצוע תנאי.
Select [ Case ] testexpression
[ Case expressionlist
[ statements ] ]
[ Case Else
[ elsestatements ] ]
End Select
Select Case MyVariable
Case 5 : MenuItemToCheck = Value
Case 7 To 9
MenuItemToCheck = Value
Case 3, 11, 13
MenuItemToCheck = Value
Case Is &gt; maxNumber
MenuItemToCheck = Value
Case Else
MsgBox("Message")
End Select
Dim Text As String = "Me"
Select Case Text
Case "All" : Camera = 0
Case "AllMe".Substring(3, 2)
Camera = 1
Case -999, -888
Camera = 1
End Select
לולאות.
לולאות הם מבנים שמבצעים פעילות מחזורית שוב ושוב. מבנים אלו אחראים לחוזק של התכנות באופן כללי, מפני שהם מאפשרים לבצע שוב ושוב מספר רב של מחזורים. שגיאה תכנותית נפוצה קשורה ללולאות במקרה שיש לולאות מתמשכות ללא יציאה מהן, נוצרת לולאה אינסופית, שנראית בעיני המשתמש כתקיעה של התוכנה שרצה.
לולאת For.
לולאה זו היא לולאה רגילה, שנזקקת למשתנה כדי שימנה את המחזורים שלה. יש לקבוע את התחום התחתון והתחום העליון, מדרגת הקפיצה בכל מחזור אופציונלית וכברירת המחדל עומדת על 1. (אפשר שהמדרגה תהיה מספר שלילי ולהתחיל ממספר גבוה לעבר מספר נמוך)
For VariableName [As Variable] = StartValue to StoptValue [Step Value]
statements...
[Continue For]