(I’ve never used VB before, so for me it’s not at all)
They refer to Option Strict , or rather, what happens when you omit it.
The following VBs are compiled and executed in full execution, if you have Option Explicit off:
Class Widget Sub Method1() End Sub End Class Sub Main() Dim someInt As Integer Dim someDouble As Double Dim someObj As Object = New Widget someDouble = 1234567890.9876542 someInt = someDouble Call someObj.Method1() Call someObj.Method2() ' causes runtime error End Sub
The above implicitly translates double into an integer, calls Method1 via the Object link and even calls Method2 (which doesn't even exist) - none of them will compile in C # or in VB with Option Strict On .
This definitely matches the definition of "not as strongly typed as" C #, "although the term seems rather subjective.
Update: We can use ILSpy to show that the “magic” happens here by looking at the compiled assembly (in C #):
object obj = new Module1.Widget(); double num = 1234567890.9876542; int i = Math.Round(num); NewLateBinding.LateCall(obj, null, "Method1", new object[0], null, null, null, true); NewLateBinding.LateCall(obj, null, "Method2", new object[0], null, null, null, true);
This explains why the VB.Net compiler is capable of doing things that would otherwise seem illegal in the CLR, although it seems to have some runtime.