Appendices: Projects, Interview Questions, Cheat Sheet & Study Plan
Capstone projects, interview questions, a cheat sheet, a VB.NET ↔ C# quick translation, and resources with a study plan.
Appendix A: Capstone Projects
Personal Finance Manager (WinForms + SQLite + Dapper). Accounts, transactions, categories, charts, CSV import with TextFieldParser, monthly reports with LINQ, DI-based architecture, unit tests.
Inventory and Order Management (layered, EF Core). Domain model with value objects (Money), repository + unit of work, the Result pattern, WinForms MVP or WPF MVVM UI, role-based login (hashed passwords), audit logging.
Document Processing Worker Service. Watches a folder, parses CSV/XML (XML literals for output), validates, stores in SQL Server, sends email notifications, runs as a Windows Service with OpenTelemetry logging.
REST API (VB ASP.NET Core Web API) + WPF client. CRUD for products, JWT auth, Swagger, resilience with Polly, integration tests with WebApplicationFactory and Testcontainers.
Plugin-Based Data Export Tool. Plugins discovered via reflection and custom attributes, loaded with AssemblyLoadContext, export formats (JSON, XML, Excel via ClosedXML, PDF via QuestPDF).
Parallel Image Processor. Parallel.ForEachAsync + Channels pipeline, progress reporting to a WinForms UI, cancellation, benchmarks with BenchmarkDotNet.
Legacy Modernization Case Study. Take a .NET Framework 4.8 VB WinForms app (or a VB6 app), migrate it to .NET 8 with the Upgrade Assistant, introduce DI, tests, and CI/CD, and document every change.
Office Integration Suite. A VB COM-visible library called from Excel VBA, plus a VB console app that generates Excel/Word reports with Open XML libraries and emails them via MailKit on a schedule.
Appendix B: Interview Questions
What's the difference between the CLR, the BCL, and the SDK? What is IL?
Explain Option Strict, Option Explicit, Option Infer, and Option Compare.
Value types vs reference types? What is boxing?
CType vs DirectCast vs TryCast?
And vs AndAlso, Or vs OrElse?
ByVal vs ByRef for reference types?
Why does Dim arr(5) As Integer have 6 elements?
What is Nothing for value types vs reference types? How do nullable comparisons behave?
Module vs Shared class vs Class?
What are Static local variables?
Explain Overridable/Overrides/Shadows/Overloads/MustOverride/NotInheritable.
Me vs MyBase vs MyClass?
Interface vs MustInherit class? How does VB's Implements syntax differ from C#'s?
How do you implement value equality correctly (Equals, GetHashCode, IEquatable)?
Structure vs Class? When should a structure be immutable?
How do events work (WithEvents/Handles vs AddHandler)? How do event subscriptions cause memory leaks?
Explain generic constraints and variance (In/Out).
What are Widening and Narrowing operators?
What is deferred execution in LINQ? IEnumerable vs IQueryable?
Explain VB's LINQ Aggregate and Group By ... Into clauses.
What are XML literals and axis properties?
How does Yield work? When does iterator code execute?
Explain Async/Await, Task.WhenAll, ConfigureAwait(False), and why Async Sub is dangerous.
What limitations does VB have with Await (Catch/Finally, Await Using, async streams)?
SyncLock vs SemaphoreSlim vs Interlocked? Why can't you await inside SyncLock?
What does the GC do? Explain generations and IDisposable.
How does dependency injection work in the Generic Host? Singleton vs scoped vs transient?
How do you avoid socket exhaustion with HttpClient?
How do you prevent SQL injection with ADO.NET and Dapper?
What's the role of the Microsoft.VisualBasic runtime library?
What are VB's limitations on modern .NET (Razor, MAUI, source generators, records)? How do you architect around them?
How would you migrate a .NET Framework VB app to .NET 8?
Explain SOLID with a VB example. Name five design patterns you've applied.
How do you unit test a WinForms application?
Implement a thread-safe LRU cache (Dictionary + LinkedList + SyncLock).
Write a generic Result(Of T) with Map/Bind, and use it in a parsing pipeline.
Write a LINQ query: top 3 products by revenue per category.
Create an Iterator Function that reads a large file in batches of N lines.
Implement retry-with-backoff for an async HTTP call with cancellation.
Build an XML report from a list of orders using XML literals.
Refactor a long Select Case pricing method into the Strategy pattern with DI.
Appendix C: Cheat Sheet
Option Strict On
Imports System.Linq
' Types & variables
Dim i As Integer = 1, d = 2.5D, s = "text", b = True, dt = Date.Today
Dim n As Integer? = Nothing : Const Max = 10
Dim arr() As Integer = {1, 2, 3} : Dim lst As New List(Of String) From {"a"}
Dim map As New Dictionary(Of String, Integer) From {{"k", 1}}
Dim t = (Name:="Ana", Age:=30) : Dim anon = New With {Key .Id = 1, .Name = "x"}
' Flow
If i > 0 AndAlso b Then : ElseIf i = 0 Then : Else : End If
Select Case i : Case 1 To 5 : Case Is > 5 : Case Else : End Select
For x = 0 To 9 Step 2 : Next : For Each v In lst : Next
Do While i < 10 : i += 1 : Loop
Dim r = If(i > 0, "pos", "neg") : Dim nm = If(s, "default") : Dim len = s?.Length
' Members
Public Property Name As String
Public ReadOnly Property Id As Guid = Guid.NewGuid()
Public Function Add(a As Integer, Optional b As Integer = 1) As Integer : Return a + b : End Function
Public Sub Log(ParamArray items() As Object) : End Sub
Public Event Changed As EventHandler(Of EventArgs)
' OOP
Public MustInherit Class Shape : Public MustOverride Function Area() As Double : End Class
Public Class Circle : Inherits Shape : Implements IComparable(Of Circle)
Public Property R As Doub
…dotnet new console -lang VB | dotnet add package X | dotnet build | dotnet test | dotnet publish -c Release -r win-x64 --self-containedAppendix D: VB.NET ↔ C# Quick Translation
Dim x As Integer = 5 null / default If a AndAlso b Then... End If if (a && b) {... } If(c, x, y) / If(a, b) c ? x: y / a ?? b Select Case x... Case 1 To 5
switch (x) { case >= 1 and <= 5:... } For i = 0 To n - 1... Next for (int i = 0; i < n; i++) { } For Each v In list foreach (var v in list) Sub M(ByRef x As Integer) void M(ref int x) Function F() As String Optional y As Integer = 0 ParamArray args() As Object params object[] args Class D: Inherits B: Implements I class D: B, I
Overridable / Overrides / MustOverride virtual / override / abstract NotInheritable / MustInherit sealed / abstract class Me / MyBase this / base TypeOf x Is T / TryCast(x, T) x is T / x as T DirectCast(x, T) M (method group) Function(x) x * 2 & (concatenation) <> / Mod / \ / ^ != / % / integer / / Math.Pow RaiseEvent E(Me, args) E?.Invoke(this, args); AddHandler o.E, AddressOf H Using r As New R() using var r = new R(); Iterator Function... Yield x IEnumerable<T>... yield return x; Async Function... As Task(Of T) async Task<T>... ''' <summary> /// <summary>
Appendix E: Resources and Study Plan
Microsoft Learn: Visual Basic docs (language reference, programming guide), .NET fundamentals, ASP.NET Core, EF Core, WinForms, WPF
github.com/dotnet/vblang (language design), github.com/dotnet/roslyn (compiler), github.com/dotnet/winforms
Books: *Murach's Visual Basic*, *Visual Basic 2015 Unleashed* (Del Sole), *CLR via C#* (Richter, with concepts that apply to VB), *Dependency Injection Principles, Practices, and Patterns* (Seemann & van Deursen), *Clean Code* (Martin), *Head First Design Patterns*
Tools: ILSpy, LINQPad (supports VB queries), BenchmarkDotNet, the ICSharpCode CodeConverter, .NET Upgrade Assistant
Practice: Exercism VB.NET track,.NET Fiddle, Rosetta Code, Advent of Code 14-Week Study Plan Platform, setup, structure, type system
Control flow, methods, strings/globalization, collections Classes, inheritance, interfaces
Structures, equality, events, generics, exceptions Lambdas, extensions, LINQ, XML literals
Iterators, nullables, reflection, late binding/expressions CLR internals, GC, async/await
Threading, parallelism, Generic Host/DI/config/logging Files/serialization, ADO.NET, EF Core/Dapper, HTTP, interop Console, WinForms, WPF/MVVM Worker services, Web APIs SOLID, patterns, architecture Testing, diagnostics, performance 47–50 + Capstone
Security, CI/CD/deployment, migration, final project Final tip: Treat VB.NET as a first-class.NET language: keep Option Strict On, structure apps with DI and interfaces, keep business logic in testable class libraries, and don't hesitate to mix in C# projects where VB has gaps. The.NET platform skills you learn here transfer anywhere. 🚀