Late Binding, Dynamic Behavior and Expression Trees

24.1 Late Binding (VB's "dynamic")

Use it for COM, Office automation without PIAs, and ExpandoObject. Isolate it, because everything else stays Option Strict On.

CallByName(obj, "Name", CallType.Get) for name-based member access.

' In a separate file with Option Strict Off
Option Strict Off
Public Module ComHelpers
    Public Sub OpenInWord(text As String)
        Dim word As Object = CreateObject("Word.Application")
        word.Visible = True
        Dim doc = word.Documents.Add()
        doc.Content.Text = text
    End Sub
End Module

24.2 Expression Trees

Uses: dynamic query builders, ORMs, rule engines, mapping libraries.

Imports System.Linq.Expressions
Dim expr As Expression(Of Func(Of Product, Boolean)) = Function(p) p.Price > 100 AndAlso p.InStock
Console.WriteLine(expr.Body)                 ' inspectable code-as-data
Dim compiled = expr.Compile()
Dim param = Expression.Parameter(GetType(Product), "p")
Dim body = Expression.GreaterThan(Expression.Property(param, "Price"), Expression.Constant(100D))
Dim dynamicFilter = Expression.Lambda(Of Func(Of Product, Boolean))(body, param)
Dim results = dbContext.Products.Where(dynamicFilter).ToList()   ' translated to SQL by EF Core