They have separate compilers (csc.exe for C # and vbc.exe for VB.Net), but they are both compiled into IL, and then, at run time, JIT compiles it into machine code.
Question 1: can a C # compiler compile VB.net code?
Answer 1: No, this is not possible, and you will see it in the example below. It gives an error if you try to do this because it is looking for C # syntax.
Question 2: I think what they say in the book. Since these are two compilers, I believe that it is incompatible
Answer 2: it does not say that you can compile VB code using C #, but it says that you can mix languages โโin one application, as in the example below, and is still able to compile C # and VB (using them compilers).
The following is an example to understand how it works. I created a solution with a C # project with a C # class and a VB project with a VB class. You should not mix C # and VB classes in the same project, as it ignores the vb file if its C # project is at build time.

The content of ClassCSharp.cs:
namespace ClassLibraryCSharp { public abstract class ClassCSharp { public int MyProperty { get; set; } protected abstract void Test(); } }
The contents of the ClassVBInCSharp.vb class in C # ClassLibrary. See how I can inherit a C # class, as well as access its properties and override the method.
Namespace ClassLibraryVB Public Class ClassVBInCSharp Inherits ClassCSharp Property Test2 As Integer Protected Overrides Sub Test() Test2 = MyBase.MyProperty End Sub End Class End Namespace
The following are the commands that I executed:
vbc.exe /reference:"ClassLibraryCSharp.dll" /target:library /out:"ClassLibraryCSharpVbVersion.dll" "ClassVBInCSharp.vb" Microsoft (R) Visual Basic Compiler version 12.0.20806.33440 Copyright (c) Microsoft Corporation. All rights reserved.
See above. The VB compiler is used to compile the vb class.
csc.exe /reference:"ClassLibraryCSharp.dll" /target:library /out:"ClassLibraryCSharpVersion.dll" "ClassVBInCSharp.vb" Microsoft (R) Visual C
See above, if I try to use the C # compiler to compile the vb class, it throws an error as it searches for C # syntax.