stanford-oval/wikipedia huggingface dataset:
אנרי דזירה לאנדרו
ביוגרפיה

לאנדרו נולד בפריז. לאחר שנטש לימודיו שירת במשך ארבע שנים בצבא צרפת, מ-1887 עד 1891, ואז נכנס למערכת זוגית עם בת דודתו שהובילה ללידת בת. כעבור שנתיים נישאו והביאו לעולם עוד שלושה ילדים. בעקבות מעשי מרמה של מעסיקו, פתח במעשי נוכלות בעצמו והונה בעיקר קשישות. על מעשי ההונאה והנוכלות שלו הוא נכלא לשנתיים ב-1900, תקופת מאסר ראשונה מבין רבות בחייו. מ-1914 החל להתנכר לאשתו, כשהוא מתפרנס ממכירת רהיטי יד שנייה.
הוא נהג לפרסם מודעות שידוכים בעיתוני פריז כפתיון להשגת שידוך, לדוגמה: "אלמן עם שני ילדים בן 43, בעל הכנסה גבוהה, רציני ומעורה בחברה טובה, מחפש אלמנה הרוצה להתחתן". בעקבות מלחמת העולם הראשונה נמצאו אלמנות רבות שנענו למודעתיו. הוא היה מפתה את הנשים, משתלט על נכסיהן ואז רוצח אותן ושורף בביתו את גופותיהן המבותרות. בין 1914 עד 1919 הוא רצח לפחות 10 נשים ואת בנה המתבגר של אחת מהן. המשטרה לא הצליחה לייחס את מעשי הרצח ללאנדרו כיוון שנהג להשתמש בשמות בדויים רבים. הוא ניהל פנקס ובו השמות בהם הציג עצמו בפני כל "מאהבת".
ב-1919 אחות אחת מקרבנותיו ניסתה לאתר אותו; היא לא ידעה את שמו האמיתי, אך הכירה את מראהו החיצוני, וכן את מקום מגוריו, והצליחה לגייס את המשטרה לעזרתה. תחילה הוא הואשם רק בהונאה ומעילה כספית וסירב לתקשר עם המשטרה; בהיעדר גופות (המשטרה חפרה היטב בחצר ביתו אך לא מצאה דבר) לא היו מספיק ראיות כדי להעמידו לדין באשמת רצח. ואולם, אז מצאו השוטרים את הפנקס עם שמותיו הבדויים ורשימת הנשים שרצח והונה. היה בכך די כדי להביאו למשפט.
ביוגרפיה > משפט והוצאה להורג

לאנדרו הועמד לדין בגין 11 סעיפי רצח בנובמבר 1921. הוא נמצא אשם בכל הסעיפים, נידון למוות והוצא להורג בגיליוטינה כעבור שלושה חודשים בורסאי. בזמן המשפט הוא צייר את מטבח ביתו עם הכיריים, כשמאחורי הציור כתב בצרפתית: "Ce n'est pas le mur derrière lequel il se passe quelque chose, mais bien la cuisinière dans laquelle on a brûlé quelque chose" ("זה לא הקיר שמאחוריו התרחשו דברים, אלא הכיריים בהם נשרף משהו"). הציור ניתן לאחד מעורכי הדין ונחשב כהודאה בעבירה.
ראו גם

המרטש מאטלנטה
המפלצת מפירנצה
הערות שוליים

↑  רוצחים סדרתיים ופסיכופתים
↑  ידיעה על הוצאתו להורג בעיתון משנת 1922
| --- | --- |
בקרת זהויות :  NLI: 987007342351105171  BnF: cb119637880 (data)  GND: 119041480  ISNI: 0000 0001 1668 4812  LCCN: nr89005262  NKC: jn20000701002  NTA: 072509716  SUDOC: 027639452  VIAF: 71399777   WorldCat (עם VIAF): 71399777 
איור המטבח שצייר לאנדרו
Visual Basic .NET

| --- | --- |

צילום מסך של VB Net 2005 בגרסה 8.0 (2005) כחלק מחבילת הסטודיו
צילום מסך של VB Net 2005 בגרסה 8.0 (2005) כחלק מחבילת הסטודיו
 פרדיגמות:  תכנות מונחה-עצמים, תכנות גנרי, תכנות פונקציונלי, strict programming, class-based programming, תכנות מונחה-אירועים, תכנות מובנה, Reflection, תכנות אימפרטיבי, תכנות מרובה פרדיגמות 
 תאריך השקה:  2001 
 מתכנן:  מיקרוסופט 
 מפתח:  מיקרוסופט 
 הושפעה על ידי:  ויז'ואל בייסיק 
 רישיון:  MIT
 סיומת:  vb 
 אתר רשמי
 
Visual Basic .NET היא גרסה של שפת התכנות ויז'ואל בייסיק, ששוכתבה מהיסוד ועברה מקצה שיפורים גדול, כדי שתתאים לסביבת NET. (שם מלא קודם ‎.NET Core) (בעבר - סביבת ‎.NET Framework) של חברת מיקרוסופט. גרסה זו הוכרזה לראשונה בפברואר 2002. אף שהיא ממשיכתה של VB6 הוויזואלית, ניתן לראות שהיא עברה מהפכה של ממש וששולבו בה אלמנטים רבים משפות אחרות כדי להתאימה לסביבה הטכנולוגית החדשה, ולהעצים את מעמדה בעולם התכנותי. בגרסת 2005 נשמטה סיומת ה-"‎.NET" אך עדיין משתמשים בה כדי להבדיל אותה מוויז'ואל בייסיק הקלאסית.
כמו כל יישומי הדוט נט, ניתן להשתמש בשפה זו למגוון רחב של מכשירים, החל מטלפונים ניידים (סמארטפון) ומחשבי כף יד (פוקטפיסי), דרך סביבת הדסקטופ, וכלה בסביבת האינטרנט. בערך זה נסקרת בעיקר יכולת הפיתוח בשפה בסביבת חלונות -WinForms. ניתן להשתמש בשפה גם עבור פיתוח ASP.NET לאתרי אינטרנט וכן ל-Console - מסך שחור הדומה לסביבת DOS.
מהות השפה

שפת Visual Basic .NET היא שפה מרובת פרדיגמות, מכיוון שבנוסף להיותה שפה מונחת עצמים, היא גם שפה פרוצדורלית, ומשולבים בה תכנות מונחה אירועים (שאף חוזק לעומת ה-VB6) ותכנות פונקציונלי. בשונה מ-C#‎ ובדומה לשפת C++‎ שפה זו היא שפה היברידית שמשלבת בין תכנות מונחה עצמים למודולים פרוצדורליים, כך שניתן ליצור משתנים ופונקציות גלובליות במודולים שאינם מחלקות.
לשפה טיפוסיות חלשה וסלחנית. קיים מנגנון של המרה אוטומטית, בין הטיפוסים השונים, והיא אף בעלת יכולת המרה אוטומטית ממשתנה מחרוזתי למשתנה מספרי, כאשר משתנה המחרוזת מכיל ערך מספרי.
בגרסה זו הושלמה יכולת תכנות מונחה עצמים במלואה, עם אפשרות של ירושה (Inherits), העמסת פרמטרים, העמסת אופרטורים (Operator), פונקציות המרה, מחלקות אבסטרקטיות (MustInherit), פונקציות אבסטרקטיות (MustOverride), פונקציות וירטואליות (Overridable), דריסת פונקציות/מאפיינים/אירועים (Overloads) והצללתן (Overrides או Shadows), יצירת ממשקים (Interface) וחשיפתם (Implements), הגדרת מאפייני רכיבי תכנות (Attribute), רפלקציה (Reflection) ועוד.
כמו כן, הוספה יכולת לשפה לטפל בהיבטים תכנותיים שונים כמו יצירת תהליכי-משנה (Threading), הימשכות (Serialization), מקביליות (Concurrency) ופעילות אסינכרונית. שימוש במצביעים לפונקציות ושגרות (Delegate), סימון קטעים קריטיים (Critical section), עבודה עם תבניות גנריות (Generic), אריזת קטעי קוד במרחב שמות (Namespace), חלוקת קטעי קוד (Region) ועוד. הסביבה תומכת בשינוי קוד תוך כדי ריצה בזמן ניפוי שגיאות (Edit and Continue), באופן חופשי למדי (רק כאשר משנים כותרת של פונקציה, צריך להריץ מחדש). ישנה השלמה אוטומטית של פקודות וביטויים לאחר שהם מתחילים להיכתב. טקסט הקוד מאורגן אוטומטית: קיימת אינדנטציה אוטומטית של הקוד לפי תוכנו ומחיקה אוטומטית של רווחים.
אף שתפיסת הפיתוח של VB נשמרה, והשימוש בתכנות ויזואלי נשמר ואף הועצם, תחביר השפה שונה ונעשה יישור קו לכיוון תחביר מקובל בשפות העיליות החזקות, כדי להגדיל את התאימות לתפיסות המקובלות, וכדי להעצים את השפה. נוספו אובייקטים וספריות רבות שמקלות על עבודת התכנות בהיבטים רבים ומגוונים. בשפה זו קובצי ההרצה (RUN TIME) של התוכנה (ה-Framework) הם קבצים משותפים לכל שפות הדוט נט, ואינם ייחודיים לשפת VB כפי שהיה עד גרסה 6, ולכן אף שמדובר בקובץ ריצה גדול יותר פי כמה וכמה מקובץ ההרצה של VB6, סביר להניח שהוא כבר יהיה מותקן, בשל התפוצה הגדולה של יישומי הדוט נט.
עם כל יציאה של מהדורה נוספת של הדוט נט, שפת ה-VB.NET שהחלה מנקודת מוצא שונה משפת #C, ויועדה לתחומי פיתוח אחרים כמו ממשקים ובסיסי נתונים, החלה להתכנס מבחינת יכולותיה ויעודה ליכולותיה של שפת #C (כאשר מאידך ב-#C משולבת הידידותיות של VB), ולמעשה האסטרטגיה של מיקרוסופט, היא להפוך שתי שפות אלו לסוג של תאומות לא זהות, במה שקרוי על ידי מנהלי הפיתוח קו-אבולוציה.
גרסאות

פרק זה לוקה בחסר. אנא תרמו לוויקיפדיה ו. ייתכן שתמצאו פירוט בדף השיחה.
גרסאות > גרסה 2002

השפה החדשה מתבססת על סביבת NET Framework. של מיקרוסופט, שהוסיפה יכולות נרחבות שכלל לא היו קיימות בגרסאות קודמות, ככתיבת יישומי ושירותי רשת וטופסי Web, וחיזוק העבודה עם בסיסי נתונים באמצעות טכנולוגיות ה-ADO.NET וה-ASP.NET, אפשרות פיתוח לפלטפורמות שונות, כמו גם הוספת פקדים מגוונים שמאפשרים פעילויות רבות, כמו גישה קלה יותר לשירותי מערכת בתחום חיפוש הקבצים וההדפסה, כמו PrintDocument להדפסה, PrintPreviewControl לתצוגה מקדימה להדפסה, NotifyIcon - לתצוגת אייקון במגש מערכת, Splitter, RichTextBox, FileSystemWatcher.
התוכנה הפכה להיות רב פלטפורמית, ואפשר לפתח בה יישומים להתקנים ניידים, למחשב האישי ויישומי אינטרנט. נוספה לה יכולת תקשורת עם שפות תכנות אחרות הכלולות בדוט נט, באופן שמאפשר התייחסות לקטעי קוד משפה לשפה (ניתן בפתרון אחד לשלב שני פרויקטים בשפות שונות), ללא צורך של כתיבה מחדש. התחביר הדומה לשפת C#‎ מאפשר לתרגם בקלות קטעי קוד משפה לשפה, תוך השגת פונקציונליות דומה.
שינוי התחביר של ה-VB הפך את התכנות בה ליותר גמיש, אך גם יותר מסובך, וחייב המרה של הגרסאות הקודמות, דבר שעורר תרעומת אצל חלק ממתכנתי ה-VB, שהעדיפו להישאר עם הגרסה הקודמת, עם זאת השינויים הרבים שהיא עברה, הפכו אותה למעשה משפת נישה שמיועדת לממשקים ובסיסי נתונים, למעמד של שפה מובילה בפלטפורמת NET Framework.
גרסאות > גרסה 2003

גרסה זו יצאה עם גרסת 1.1 NET Framework. בין היכולות הוספה תמיכה בגרסה קומפקטית של הדוט נט פריימוורק שמיועדת להתקנים ניידים כמו מחשבי כף יד. שיפור באשף שדרוג מגרסאות קודמות. שיפור ניכר גם בביצועים ובמהימנות של סביבת הפיתוח המשולבת.
גרסאות > גרסה 2005

בגרסה 2005 שיצאה עם גרסת 2 NET Framework, יש ניסיון לחזור למוסכמות תכנותיות של ה-VB6, כך למשל בטופס: חלון הקוד פושט וסולקו ממנו בברירת המחדל הגדרות מפורטות של הפקדים, הבנאי ועוד לחלון נפרד של עיצוב הטופס (Just My Code). הוסף האובייקט My, שמאפשר להתייחס בקלות לאובייקטים תכנותיים מגוונים לפי נושאים, חזרה השליטה על הגדרת תחומי מערך, והוסף תחביר להצגה מידית של טפסים, כפי שהיה נהוג בעבר. קיימת מחלקה לטיפול מובנה בפרמטרים של התוכנה, הנשמרים והנקראים מקובץ XML. הוספה אפשרות מובנית לרכז את כל המשאבים של הפרויקט במקום אחד, מה שמונע כפילות שהייתה קיימת עד כה. הוספו תגיות חכמות לפקדים, וניתן לקשור בין אירועי פקד לבין שגרות קיימות, מתוך רשימה קיימת באופן דומה למה שכבר יושם בעבר בתוכנת אקסס.
בגרסה זו הוספה לראשונה יכולת של העמסת אופרטורים והעמסת המרת סוג. הוגמש וחוזק השימוש במאפיינים ובאירועים. הוספו טיפוסי מספרים שלמים מסוג Unsigned, פקודת TryCast לבדיקת ביצוע המרה, פקודת Continue בלולאות, בלוק Using לשימוש מהיר באובייקט ושחרורו, הגדרה אגבית של מונה הלולאה בתחילת לולאות, תמיכה מובנית וחזותית בפרמטרים של הגדרות התוכנה באמצעות מחלקה ייעודית (Settings), הערות מתכנת במבנה XML להסבר הקוד, ותמיכה גנרית באוספי רשומות, למספר רב של טיפוסים כמו BitArray HashTable, Queue, StoredList ו-Stack. משמעות חלק מהשיפורים היא הגברת התאימות לשפת #C.
כמו כן, הוספו כחמישה עשר פקדים מובנים חדשים ביניהם SerialPort - לגישה ליציאה הטורית של המחשב, MaskedTextBox ליצירת תיבת טקסט עם מסכות, BackgroundWorker - לביצוע תהליכון ברקע, TableLayoutPanel - לסידור של פקדים במבנה, WebBrowser - לקריאה של קובצי HTML ושירותי דפדפן, ו-FolderBrowserDialog - לדפדוף בתיקיות דיסק. משפחת פקדי תפריטים חדשים (Strip) שמחליפים את פקדי התפריטים הישנים (Bar), ופקדי כריכה לנתונים של קובצי בסיסי נתונים, הכוללים תכנות ויזואלי שמאפשר בקלות לייצר טופסי נתונים באופנים שונים. פקדים אלו מהווים תוספת משמעותית להקלה על העבודה התכנותית בהרבה היבטים. גם הפקדים שכבר היו כלולים באופן כזה או אחר, בחבילת הפקדים השיתופיים של הוויז'ואל בייסיק בגרסה 6, עברו מקצה שיפורים.
כמו בגרסאות הקודמות, ניתן לייצר קובץ התקנה והפצה כפרויקט בתוך פתרון. בגרסה זו הוספה יכולת להורדה של סביבת הדוט.נט מאתר מיקרוסופט, במקרה שהיא עדיין איננה קיימת במחשב.
בשפה זו כמו בכל חבילת השפות של הדוט.נט הוספה גרסת חינם לחובבים וסטודנטים, בשם Visual Basic 2005 Express. לגרסה זו שכוללת סביבת פיתוח חלקית, חסרים כמה וכמה היבטים המצויים בגרסה המלאה ובהם הידור ל-64 ביט ולהתקנים ניידים, ניוון מנגנון ההפצה, היעדר אפשרות להוסיף הרחבות ועוד.
גרסאות > גרסה 2008

גרסה זו גם מכונה Visual Basic .NET 9.0 יצאה ביחד עם NET Framework 3.5. חידושים בגרסה זו: הוספה שפת LINQ שהיא הרחבה של שפת SQL לאובייקטים, מסדי נתונים ושפת XML, ופישוט התכנות של מבנים ועבודה עם רשומות בעקבות הכנסת חידוש זה. בעקבות זאת פקודות SQL הפכו לחלק מהתחביר של VB.NET. בגרסה זו נוסף פרויקט מסוג WPF שיועד על ידי מיקרוסופט להיות מערכת הדור הבא ליישומי לקוח. בפרויקט זה הופרד עיצוב הממשק מהקוד לשפה מבוססת XML, והושם דגש על הוויזואליות של הממשק, ועל שימוש קל בגרפיקה דו־ממדית ותלת־ממדית, אנימציה, מולטימדיה, טיפול במסמכי XPS ובדיו אלקטרוני ועוד. נוספה תמיכה במולטי טרגטינג שהיא האופציה לתחם את הפרויקט לגרסה מסוימת של ‎.NET, ואף למקד את הפרויקט לגרסת מערכת הפעלה מסוימת. נוספו שיפורים לשפה כמו אפשרות להגדיר משתנים ריקים (שערכם Nothing), ולבצע קריאה לשגרת פקד קיימת ללא פרמטרים, תמיכה בתחשיב למדא, Type inference (זיהוי אוטומטי של סוג טיפוס ערך), Anonymous type -טיפוס אלמוני, שמייתר הגדרה מפורשת בתחשיב למדא, ו-Extension method - תכונה המאפשרת להרחיב יכולות של אובייקטים של המערכת ולהוסיף להם שיטות מותאמות של המתכנת. ה-IDE שופר בתחביר האינטליגנטי שמקפיץ חלונית צפה ובו המילים האפשריות לפי הקשר, וכן בסידור שורות המשך (בשימוש באופרטור _, קו תחתון). מנפה השגיאות שוכלל באופן שמאפשר לעקוב אחרי תהליכונים, ולדלג לתוך קוד המקור של ספריות הדוט נט עצמו. נוספה ארכיטקטורה חדשה של הרצת קוד מנוהל שמאפשר להריץ טוב יותר את הקוד. וכן, קוד מטריקס שמאפשר לאבחן את הסיבוכיות וקלות התחזוקה של קוד המקור של המתכנת לפי מתודות.
גרסאות > גרסה 2010

גרסה זו שמספרה הוא 10.0 יצאה באמצע אפריל 2010, ביחד עם NET Framework 4.
בגרסה זו הורחבה התמיכה בפקודת Lambda. במקרים רבים בוטל הצורך בשימוש במקף החיבור (_) לפקודה שמשתרעת על פני מספר שורות. נוספה אפשרות ליישום אוטומטי (ומקוצר) של מאפיין מחלקה בשורה בודדת בדומה לקיים ב-C#‎. הוסף אתחול מקוצר של אובייקט אוסף, בדומה לאתחול של מערך. נוספו שיפור עבודה עם מערכים. תמיכה ב-Dynamic Language Runtime, כך שהשפה יכולה לתקשר ביתר קלות עם שפות דינמיות. שיפור בפרמטרים אופציונאליים. והוספת אפשרות להטמעת מעטפת Interop לרכיבי COM בקובץ ההרצה של היישום, במקום DLL עצמאי, כדי למנוע התנגשות בין גרסאות שונות. בטופס נוסף פקד chart - ליצירת גרפים. (לרשימת חידושים רשמית).
גרסאות > גרסה 2012

לגרסה זו הוספו מספר תכונות חדשות:
יכולת א-סינכרונית (Async feature) למשל באמצעות פונקציה אסינכרונית שבה מקטע מתבצע במשימה (Task) נפרדת מהתהליך שקורא לו.
Async Function AccessTheWebAsync() As Task(Of Integer)
    Dim client As HttpClient = New HttpClient()
    Dim getStringTask As Task(Of String) = client.GetStringAsync("http://site.org")
    DoIndependentWork()
    Dim urlContents As String = Await getStringTask
    Return urlContents.Length
End Function
איטרטורים (Iterators) המשמשים לביצוע איטרציה מותאמת אישית על אוספים כגון רשימות או מערכים.
היררכיית הקריאה (Call Hierarchy) מאפשרת לך לנווט את הקוד שלך על ידי הצגת כל הקריאות, דבר המאפשר להבין טוב יותר את זרימת הקוד.
גרסאות > גרסת 2013 (VB 12.0)

גרסת Visual Basic 2013 שוחרר לצד .NET Framework 4.5.1 עם Visual Studio 2013. יכול גם לבנות יישומי .NET Framework 4.5.2 על ידי התקנת Developer Pack.
גרסאות > גרסת 2015 (VB 14.0)

גרסת Visual Basic 2015 (קוד בשם VB 
14.0) שוחרר עם Visual Studio 2015. תכונות השפה כוללות "?." אופרטור לביצוע בדיקות null מוטבעות, ותכונת אינטרפולציה חדשה של מחרוזת כלולה לעיצוב מחרוזות בשורה.
גרסאות > גרסת 2017 (VB 15.x)

גרסת Visual Basic 2017 (קוד בשם VB "15.) שוחרר עם Visual Studio 2017. מרחיב את התמיכה בתכונות השפה החדשות של Visual Basic 15 עם גרסאות 2017, 15.3, 15.5, 15.8. מציגה רפקטורים חדשים המאפשרים ארגון קוד מקור בפעולה אחת.
גרסאות > גרסת 2019 (VB 16.0)

גרסת Visual Basic 2019 (קוד בשם VB "16.0") שוחרר עם Visual Studio 2019. זוהי הגרסה הראשונה של Visual Basic המתמקדת ב-.NET Core.
גרסאות > בין שפת VB.NET לשפת C#‎

שתי שפות אלו הן השפות המרכזיות של סביבת הדוט נט, והפונקציונליות התכנותית של שתי שפות אלו בסופו של דבר דומה, על אף שהתחביר שלהן מבוסס על שפות שונות. פונקציונליות זו אף מתכנסת מגרסה לגרסה, כך שקיימים ממירים אוטומטיים שממירים קוד משפה לשפה, ושאת קוד הביניים שנוצר (CIL) ניתן להנדס לאחור לכל אחד משפות אלו. התאימות ביניהן כה חזקה שמחלקה שנכתבה ב-C#‎, ניתן לרשת ב-VB.NET ואף לדרוס פונקציה שקיימת בה.
בשפת VB.NET הושם דגש על ידידותיות וקלות בפיתוח (אוטומציה גדולה יותר בחילול קוד. השלמה אוטומטית של כתיבת פקודות, הזחה אוטומטית של הקוד, ניווט קל בין אירועי פקד, הסתרה של Delegate וטיפול אוטומטי באירועים), על האינטואיטיביות והקריאות של הקוד (פקודות מפורשות ומובנות יותר), ושפה זו יותר גמישה תכנותית ו"סבלנית" כלפי המפתח (למשל המרה אוטומטית בין טיפוסי משתנים, הנגשת תכונות sender בפונקציית אירוע ללא המרה, משפט Case שאפשר לערב בו אותיות, מספרים ואף ביטויים, מאפיין עם פרמטר ועוד), ופעולות טכניות שונות הוסתרו מאחורי הקלעים. לעומת זאת בשפת C#‎ הושם דגש על הדיוק הטכני וההקפדה התכנותית (למשל בהמרה בין סוגי משתנים, הקפדה על החזרת ערך בפונקציה), על הבנה ומעורבות עמוקה של המתכנת בתכנות, על חוזק תחבירי של הקוד (שמבוסס על קונבנציות של שפת C), ועל תאימות והתממשקות לשפת C++‎ (אפשרות לכתוב קטעי קוד מעורבים של C#‎ ו-C++‎).
בעוד ששפת VB.NET אמורה לשמש את מתכנתי ה-VB, שפת C#‎ אמורה לשמש את מתכנתי ++C. ולכן בסופו של דבר יצא ששפת C#‎ יותר פופולרית אצל מתכנתים, והיצע המשרות בה גדול באופן ניכר על פני המשרות בשפת VB.NET.
מבנה השפה

בדומה ל-#C לכל רכיב בשפה קיימות חמש רמות הרשאה לגישה. ההרשאה הפתוחה ביותר היא Public המאפשרת גישה מכל אובייקט, לאחריה הרשאת Protected המצמצמת גישה למחלקות יורשות, ולאחריה הרשאת Private שמצמצמת גישה רק לחברי המחלקה עצמה. בנוסף ישנה הרשאת Friend המאפשרת גישה כללית רק מתוך ה-Assembly של המחלקה, והרשאת Protected Friend המאפשרת גישה מתוך מחלקות יורשות גם אם הן ב-Assembly אחר.
ב-VB.NET קיימים שני תחומים שבהם ניתן לכתוב קוד:
מבנה השפה > מודול

הראשון הוא מודול (Module). מודול הוא המתחם הגלובלי של VB.NET. באזור זה שמתחיל במילה השמורה - Module ומסתיים במילה השמורה - End Module, ניתן לכתוב קטעי קוד שונים: הגדרות של טיפוסים ומבנים חדשים, הכרזות של משתנים, פונקציות ושגרות ובגרסת הדוט נט, אף מחלקות. פונקציות כלליות שאינן שייכות למחלקה מסוימת, נהוג לכותבן באזורים אלו. כמו כן, זהו המקום להכריז על משתנים ואף מחלקות שרוצים שיהיו גלובליים ונגישים לכל התוכנית. ישנה שגרה מיוחדת בשם ()Main שתיכתב במודול ראשי, שתפקידה הוא להתחיל את הרצת התוכנה כולה. אם כותבים אותה עם פרמטר מערך, אפשר לקבל פרמטרים בהרצת קובץ ה-EXE של התוכנה ולהתייחס אליהם בשגרה.
מבנה השפה > מחלקה

התחום השני שהו קוד יכול להתקיים הוא המחלקה (Class). המחלקה או האובייקט הוא מושג מרכזי בשפה. רבים מרכיבי ה-VB הם מחלקות, וביניהם אפשר למנות את הטפסים, הפקדים ופקדי המשתמש. למעשה אף המשתנים הרגילים הם טיפוסי אובייקטים.
כל מחלקה צריכה להתחיל במילה השמורה - Class ולהסתיים ב- End Class.
למחלקה יכולים להיות שגרה בונה New()‎ ושגרה הורסת Finalize()‎, כדי שיהיה אפשר לשלוט על הקוד ביצירתו של האובייקט ובסגירתו. כל מחלקה יכולה להכיל טיפוסים, מבנים, קבועים, משתנים, שיטות, תכונות ואירועים.
כל מחלקה יכולה להוריש את תכונותיה למחלקת בן (באמצעות המילה השמורה Inherits). ההתייחסות למחלקה הנוכחית (Me), למחלקת הבסיס (MyBase). אפשר לבצע דריסה של שגרה או פונקציה במחלקה היורשת (המוגדרת כ-Overrides) על גבי שגרה/פונקציה של מחלקת הבסיס (המוגדרת כ-Overridable), ב-VB אפשר גם ליצור מחלקה אבסטרקטית שהיא מחלקת בסיס שנועדת לירושה בלבד ולא ליצירת מופע ממשי (MustInherits). במחלקה כזאת ניתן לכפות יצירה של שגרות ומאפיינים במחלקות היורשות (MustOverride). מאידך ניתן גם ליצור מחלקה שאיננה נורשת, אלא משמשת רק למופע (NotInheritable).
ניתן לפצל מחלקה אחת למספר קבצים, כך שכל קובץ יכיל חלק מהגדרות המחלקה (Partial). בטפסים המערכת עושה שימוש בתכונה זו, כדי להפריד בין הגדרות הפקדים לבין הלוגיקה של המתכנת.
לשפה יש יכולת להעמסת פונקציות/שגרות. העמסה (OverLoading) היא היכולת להעמיס באותה מחלקה כמה שגרות/פונקציות באותו שם. הדבר יעיל במיוחד כאשר ישנם מספר אופנים של טיפול לדבר מסוים. כך ניתן לרכז מספר רב של פעולות דומות תחת קורת גג אחת. ההבדל בין השגרות/פונקציות יהיה בפרמטרים שלהם: במספרם, בטיפוסם ובסידורם, שחייב להיות שונה, שאילולי כן התוכנית לא תדע לאיזו פונקציה/שגרה להתייחס בזמן הקריאה. (החל מגרסת 2005 נוספה גם אפשרות להעמסת אופרטורים במחלקות).
ב-VB אפשר ליצור מחלקות מקוננות (מחלקה שמכילה מחלקה נוספת), אבל לא פונקציות מקוננות.
Imports Namespace.Class
Public Class ClassName
         Inherits ClassBase
 'משתנים כלליים
 Dim|Private|Public Variable1 As Type, Variable2 As Type
 'שגרה
 
 Private|Public Sub SubName(ByVal|ByRef ParametName As Type) [Handles Object.Event]
   Dim LocalVariable As Type
   ...
 End Sub

 Private|public Function FunctionName(ByVal|ByRef ParametName As Type) As Type
   Dim LocalVariable As Type
   return LocalVariable
 End Function

End Class
כדי ליצור מופע חדש של אובייקט, יש להגדיר אותו (New). ניתן ליצור חברים סטטיים במחלקה (באמצעות הקדמת המילה Shared למשתנה, למתודה או למאפיין). בשיטה זו ניתן ליצור פונקציות גלובליות ללא שימוש במודולים של VB.
מבנה השפה > מחלקה > מאפיינים

לכל מחלקה יכולות להיות מאפיינים (Property). המאפיין מהווה חלק מיישום הכמיסות של המחלקה. לחסום אפשרות של עדכון ישיר של משתני מחלקה מבחוץ, ללא בקרה של המחלקה. באמצעות המאפיינים מאפשרים למשתמש במחלקה לעדכן או לקבל מידע ממנה, ועם זאת לבקר את פעולותיו, ולמנוע ממנו גישה חופשית לגמרי, שעלולה לפגום בנתונים ובזאת הופכים את המאפיין ל"משתנה חכם".
המאפיין שיוגדר כפומבי מהווה למעשה פילטר וחוצץ, בין המשתנה הפרטי ש"מוטמן" בעמקי המחלקה לבין המשתמש של המחלקה. באמצעות המאפיינים ניתן גם לחסום את הקריאה (מאפיין לכתיבה בלבד) או את הכתיבה (מאפיין לקריאה בלבד) למאפיין, כאשר פשוט פקודת Get או פקודת Set מושמטת בהגדרתו, והמאפיין מוכרז לקריאה/כתיבה בלבד. המאפיין הופך למעשה את המשתנה הפסיבי, למשתנה אקטיבי שיש לו יכולת בקרה, שליטה ומניפולציה על התוכן שמושם בו או נלקח ממנו.
ב-VB פקודות Get ו-Set של מאפיינים היו נפרדים, מה שעשה את התוכנה לפחות קריאה. ב-VB.NET פקודות ההשמה ('Set) והקבלה (Get) מרוכזות במאפיין אחד.
Private LocalVariable As VariableType

Public Property MyProperty() As VariableType
   Get
      Return LocalVariable
   End Get
   Set(ByVal value As VariableType)
      LocalVariable = value
   End Set
End Property
בדוגמה לעיל ללקוח שישתמש באובייקט, יהיה קיים מאפיין בשם MyProperty, שבאמצעותו הוא יהיה נגיש למשתנה LocalVariable של המחלקה, לפקודות של השמה ושל קבלה. בדוגמה לא נעשה שימוש בבקרה או במניפולציה על המאפיין, אבל בהחלט ניתן ומומלץ לעשות כן. יש לשים לב שסוג הפרמטר של התכונה ושל ה-SET שלה, חייבים להיות זהים.
כמו כן ניתן ליישם ב-VB.NET מאפיינים עם פרמטרים, בדומה לפונקציה. הדבר יכול להיות שימושי בהתייחסות למערכים, במטרה לבצע שליפה של איבר במערך או השמה אליו. בדוגמה מאפיין בשם Bytes שמחזיר/משים איבר מסוים במערך של בתים.
Private _Bytes() As Byte

    Public Property Bytes(ByVal index As Integer) As Byte
        Get
            Return _Bytes(index)
        End Get
        Set(ByVal value As Byte)
            _Bytes(index) = value
        End Set
    End Property
החל מגרסה 2010 ניתן ליצור מאפיין מיושם אוטומטי (Auto-Implemented Properties) בשורה בודדת, שבהן הגדרת מאפיין יוצרת משתנה פרטי נסתר שתואם לטיפוס המשתנה. השימוש במאפיין כזה שימושי ונוח כאשר רוצים מאפיין פשוט, ללא כל צורך לעשות בדיקות בהשמה של המאפיין.
Public Property Name As String
מבנה השפה > מחלקה > אירועים

שפת ה-VB היא ביסודה גם שפה מונחת אירועים. זאת אומרת שאינטראקציה בין אובייקטים והעברת הודעות נעשית באמצעות אירועים (האובייקט המתארח מדווח לאובייקט המארח), וכמעט כל תוכנה שנכתבת בשפה משתמשת בהם. למעשה לחלק ניכר מהרכיבים המובנים בשפה, קיימים אירועים שונים שמתבצעים בתנאים שונים. האירועים הנפוצים ביותר קשורים לפעולת המשתמש כמו אירועי מקלדת ועכבר, אך יכולים להיות אירועים נוספים כמו אירועים הקשורים לפעילות התוכנה, כמו בעת הרצת התוכנה ובעת סגירתה, סיום ביצוע פעילות מסוימת, או אירועי שעון מערכת. ב-VB.NET הורחבו האירועים של האובייקטים השונים למקרים רבים, כך שהם מכסים טווח נרחב יותר של אופציות, ומגבירים בכך את הגמישות התכנותית.
ב-VB6 הקשר בין אובייקט לאירוע חד-חד ערכי, לעומת זאת ב-VB.NET הקשר בין אובייקט לאירוע הוא רב ערכי, כך שאירוע יכול להיות מוזנק על ידי מספר רב של אובייקטים אף מטיפוסים שונים (באמצעות הידית (Handles) שיכולה להיות מוצמדת לסוף כותרת השגרה. (ולצורך כך אף הוסף פרמטר בשם Sender בשגרות אירוע, שבאמצעותו ניתן לזהות את האובייקט שמזניק את האירוע). כמו כן, אובייקט אחד יכול להזניק מספר רב של אירועים בו זמנית בפעילות בודדת.
בדוגמה, ארבעה כפתורים שקשורים לאותו אירוע, והתוצאה בלחיצה על אחד מהכפתורים הללו תהיה הודעה למסך עם שמו של הכפתור המזניק.
Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
     Handles Button1.Click, Button2.Click, Button3.Click, Button4.Click
        MessageBox.Show("Name: " & sender.Name)
  End Sub
למעשה אפשר להגדיר אירוע ולהזניקו בכל הליך תכנותי. הדבר חיוני בתכנות מונחה עצמים, לתקשר עם החוץ, ולהוציא הודעות בסיטואציות מסוימות אל מחוץ למחלקה. כדי ליצור אירוע יש:
כדי ללכוד אירוע יש:
בדוגמה הבאה ניתן לראות שתי מחלקות. במחלקת People מוגדרת פונקציה CheckBirthDate, שבודקת אם חל היום יום ההולדת, ומזניקה את האירוע BirthDate במידה והתשובה חיובית, עם חישוב של הגיל. ובמחלקת Form1 ממומש אובייקט של People שלוכד את האירוע BirthDate בעת שהוא יוזנק במחלקת People. הדבר מאפשר לכמוס את הבדיקה במחלקת People, ולא להכביד על מחלקת Form1 בבדיקות מיותרות.
Public Class Form1
    Private WithEvents people1 As People = New People()

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        people1.Id = "068557588585"
        people1.Name = "John Doe"
        people1.DateOfBirth = #8/30/1999#
    End Sub

    Sub BirthDate(ByVal sender As Object, id As String, ByVal age As Integer) Handles people1.BirthDate
        Console.WriteLine(id.ToString() & " " & age.ToString())
    End Sub
End Class

Public Class People
    Public Property Id As String
    Public Property Name As String
    Public Property DateOfBirth As Date

    Public Event BirthDate(ByVal sender As Object, id As String, ByVal age As Integer)

    Private Sub CheckBirthDate() ' Operate by timer once a day
        If (DateOfBirth.Month = Date.Today.Month And DateOfBirth.Day = Date.Today.Day) Then
            RaiseEvent BirthDate(Me, Id, DateDiff(DateInterval.Year, DateOfBirth, Date.Today))
        End If
    End Sub
End Class