Question: This is **code-related** as in what the compiler will allow you to do in one language, but not allow you to do in another language (e.g. optional parameters in VB don't exist in C#).

Please provide a code example with your answer, if possible. Thank you!

Answer: 
VB allows nonvirtual calls to virtual instance methods (`call` in IL), whereas C# only allows virtual calls (`callvirt` in IL). Consider the following code:

```
Class Base
    Public Overridable Sub Foo()
        Console.WriteLine("Base")
    End Sub

    Public Sub InvokeFoo()
        Me.Foo()
        MyClass.Foo()
    End Sub
End Class

Class Derived : Inherits Base
    Public Overrides Sub Foo()
        Console.WriteLine("Derived")
    End Sub
End Class

Dim d As Base = New Derived()
d.InvokeFoo()

```

The output is:

```
Derived
Base

```

That's not possible in C# (without resorting to `Reflection.Emit`).
In C# you have to assign your variable before you can use it. I think you can turn this off, but it's the default behavior.

So something like this:

```
int something;
if (something == 10)
{ ... }

```

Isn't allowed, but the VB equivalent would be.