它们有单独的编译器(C# 的 csc.exe 和 VB.Net 的 vbc.exe),但它们都被编译成 IL,然后在运行时 JIT 将其编译成机器代码。
问题1:C#编译器可以编译VB.net代码吗?
答案 1:不,它不能,您将在下面的示例中看到这一点。如果您尝试这样做,则会出现错误,因为它会查找 C# 语法。
问题 2:我认为这就是他们在书中所说的。由于是两个编译器,感觉不兼容
答案 2:它并不是说您可以使用 C# 编译 VB 代码,但它说您可以像我在下面的示例中那样在单个应用程序中混合语言,并且仍然能够编译 C# 和 VB(使用它们的编译器)。
请参阅下面的示例以了解其工作原理。我使用带有 C# 类的 C# 项目和带有 VB 类的 VB 项目创建了一个解决方案。你不应该在同一个项目中混合 C# 和 VB 类,因为如果它是 C# 项目,它会在构建过程中忽略 vb 文件。
ClassCSharp.cs 的内容:
namespace ClassLibraryCSharp
{
public abstract class ClassCSharp
{
public int MyProperty { get; set; }
protected abstract void Test();
}
}
C# ClassLibrary 中 ClassVBInCSharp.vb 的内容。了解如何从 C# 类继承以及访问其属性并覆盖该方法。
Namespace ClassLibraryVB
Public Class ClassVBInCSharp
Inherits ClassCSharp
Property Test2 As Integer
Protected Overrides Sub Test()
Test2 = MyBase.MyProperty
End Sub
End Class
End Namespace
查看我运行的以下命令:
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.
见上面VB编译器是用来编译vb类的。
csc.exe /reference:"ClassLibraryCSharp.dll" /target:library /out:"ClassLibraryCSharpVersion.dll" "ClassVBInCSharp.vb"
Microsoft (R) Visual C# Compiler version 4.0.30319.33440 for Microsoft (R) .NET Framework 4.5
Copyright (C) Microsoft Corporation. All rights reserved.
ClassLibrary1\ClassVBInCSharp.vb(1,1): error CS
0116: A namespace cannot directly contain members such as fields or methods
如果我尝试使用 C# Compiler 编译 vb 类,请参见上文,它会在查找 C# 语法时引发错误。