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 Module24.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