我在一本书中发现了以下内容。我正在学习并且对以下内容感到好奇。
IL体系结构的第二个主要优点是,它使框架成为语言中立的。在很大程度上,语言的选择不再取决于无语言的能力,而是由开发人员或tam的偏好所决定。您甚至可以在单个应用程序中混合使用语言。可以从VB2005类派生用C#编写的类,并且在VB @ 005方法中捕获在C#方法中引发的异常。
我的问题是,ASP.NET是否使用同一编译器来编译VB.net和C#?
更新:(另一个查询)
C#编译器可以编译VB.Net代码吗?
它们有单独的编译器(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#编译器来编译vb类,请参见上文,它在寻找C#语法时会抛出错误。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句