La pregunta que todos los que empieza a desarrollar sobre .NET es que lenguaje deben utilizar… si el C# ya que como muchos suponen es “más fuerte” que el Visual Basic .NET, pero no es de esta manera y les voy a explicar por que es esto; ya que como es sabido todo lenguaje del .NET se compila a un lenguaje intermedio o mas conocido como MSIL o IL por sus siglas en Ingles, pero para que se dean cuenta aqui un pequeño ejemplo del conocido programa Hola Mundo con el IL para ambos casos:
VB.NET
Module Hola
Sub Main()
Console.WriteLine(”Hola mundo desde una app en VB!!!”)
Console.Read()
End Sub
End Module
IL
1. .method public static void Main() cil managed
2. {
3. .entrypoint
4. .custom instance void [mscorlib]System.STAThreadAttribute::.ctor() = ( 01 00 00 00 )
5. // Code size 20 (0x14)
6. .maxstack 8
7. IL_0000: nop
8. IL_0001: ldstr “Hola mundo desde una app en VB!!!”
9. IL_0006: call void [mscorlib]System.Console::WriteLine(string)
10. IL_000b: nop
11. IL_000c: call int32 [mscorlib]System.Console::Read()
12. IL_0011: pop
13. IL_0012: nop
14. IL_0013: ret
15. } // end of method Hola::Main
C#
class Class1 {
[STAThread]
static void Main(string[] args) {
Console.WriteLine (”Hola mundo desde una app en C#!!!”);
Console.Read();
}
}
IL
1. .method private hidebysig static void Main(string[] args) cil managed
2. {
3. .entrypoint
4. .custom instance void [mscorlib]System.STAThreadAttribute::.ctor() = ( 01 00 00 00 )
5. // Code size 17 (0x11)
6. .maxstack 1
7. IL_0000: ldstr “Hola mundo desde una app en C#!!!”
8. IL_0005: call void [mscorlib]System.Console::WriteLine(string)
9. IL_000a: call int32 [mscorlib]System.Console::Read()
10. IL_000f: pop
11. IL_0010: ret
12. } // end of method Class1::Main
Lo primero que habrás notado es que el programa en Visual Basic .NET genera tres líneas más de código IL (las líneas 7, 10 y 13) que el programa en C#, y te preguntarás por qué. Esto es simplemente debido a que Visual Basic .NET permite agregar puntos de interrupción en líneas de código no ejecutable, como por ejemplo en un End Sub, y esto lo maneja agregando instrucciones nop (No Operation) al IL generado; sin embargo, estas instrucciones, de las cuales cabe mencionar que su consumo de ciclos de procesamiento es prácticamente nulo, solo son agregadas cuando la compilación se hace en modo de depuración, de manera tal que si compilamos la misma aplicación utilizando la opción Release obtenemos el IL igual el de C#, por lo que te habrás dado cuenta todo se convierte al mismo lenguaje por lo tato ambos lenguajes son igual de poderosos y tiene soporte por parte de la respectiva empresa =)…. así que tu decides usar!!!!!!!!!!!!!!