¿Cuáles son las diferencias funcionales más importantes entre C# y VB.NET?


Ciertamente existe la diferencia en la sintaxis general, pero ¿qué otras distinciones críticas existen? Hay algunas diferencias, ¿verdad?

Author: Larsenal, 2008-08-14

15 answers

Las comparaciones vinculadas son muy exhaustivas, pero en cuanto a las principales diferencias, señalaría lo siguiente:

  • C # tiene métodos anónimos VB también los tiene ahora
  • C # tiene la palabra clave yield (bloques iteradores)VB11 agregó esto
  • VB soporta enlace tardío implícito (C# tiene enlace tardío explícito ahora a través de la palabra clave dinámica)
  • VB soporta literales XML
  • VB no distingue entre mayúsculas y minúsculas
  • Más fragmentos de código listos para usar para VB
  • Más herramientas de refactorización listas para usar para C# Visual Studio 2015 ahora proporciona las mismas herramientas de refactorización para VB y C#.

En general, las cosas en las que MS se enfoca para cada uno varían, porque los dos idiomas están dirigidos a audiencias muy diferentes. Esta entrada de blog tiene un buen resumen de las audiencias objetivo. Probablemente sea una buena idea determinar en qué audiencia estás, porque determinará qué tipo de herramientas obtendrás de Microsoft.

 32
Author: Luke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-11 01:21:02

Este tema ha tenido mucho tiempo presencial desde que se lanzó.Net 2.0. Vea este artículo de Wikipedia para un resumen legible.

 9
Author: Rob Allen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-14 20:02:47

Esto puede considerarse sintaxis, pero VB.NET es mayúscula ensensible mientras que C# es mayúscula sensible.

 5
Author: Seibar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-15 02:44:56

Esta es una referencia muy completa.

 3
Author: Tom Grochowicz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-14 20:03:21

Dado que asumo que puedes google, no creo que un enlace a más sitios sea lo que estás buscando.

Mi respuesta: Elige basarte en el historial de tus desarrolladores. C# es más como JAVA, y probablemente como C++. VB.NET era más fácil para los programadores de VB, pero supongo que eso ya no es un problema, ya que no hay nuevos programadores de.NET que vengan de VB antiguo.

Mi opinión es que VB es más productivo que C#, parece que siempre está por delante en términos de herramientas de productividad (como intelisense), y recomendaría vb sobre c# a alguien que pregunta. Por supuesto, alguien que sabe que prefiere c# no preguntará, y c# es probablemente la opción correcta para él.

 2
Author: csmba,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-14 20:23:49

Aunque el azúcar de sintaxis en C # 3 realmente ha empujado la barra hacia adelante, debo decir que algunas de las cosas de Linq a XML en VB.Net parece bastante agradable y hace que el manejo de XML complejo y profundamente anidado sea un poco más tolerable. Sólo un poco.

 2
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-17 18:21:27

Una diferencia evidente está en cómo manejan los métodos de extensión (Vb.Net en realidad permite algo que C# no-pasar el tipo en el que el método de extensión se define como ref): http://blog.gadodia.net/extension-methods-in-vbnet-and-c /

 2
Author: Vaibhav,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-17 18:32:08

Aparte de la sintaxis no mucho más. Ambos compilan exactamente el mismo IL, así que puedes compilar algo como VB y reflejarlo en C#.

La mayoría de las diferencias aparentes son azúcar sintáctico. Por ejemplo, VB parece soportar tipos dinámicos, pero en realidad son tan estáticos como C# - el compilador VB los descubre.

Visual Studio se comporta de manera diferente con VB que con C#: oculta mucha funcionalidad pero agrega compilación en segundo plano (ideal para proyectos pequeños, acaparamiento de recursos para los grandes) y mejor soporte de fragmentos de código.

Con más y más compilador 'magic' en C # 3 VB.Net realmente se ha quedado atrás. La única cosa que VB ahora tiene que C# no es la palabra clave handles - y eso es de discutible beneficio.

@Tom-eso realmente útil, pero un poco anticuado - VB.Net ahora soporta documentos XML también con '''

@ Luke - VB.Net todavía no tiene métodos anon, pero ahora soporta lambdas.

 1
Author: Keith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-14 20:34:32

La mayor diferencia en mi opinión es la capacidad de escribir código inseguro en C#.

 1
Author: the_lotus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-08-26 20:27:49

Aunque VB.NET soporta try...catch type exception handling, todavía tiene algo similar a VB6 EN CASO de ERROR. POR ERROR se puede abusar seriamente, y en la gran mayoría de los casos, tratar...catch es mucho mejor; pero EN CASO de ERROR puede ser útil cuando se manejan operaciones de tiempo de espera COM donde el error puede ser atrapado, decodificado, y el último "inténtalo de nuevo" es una simple línea. Puedes hacer lo mismo con try...atrapa, pero el código es mucho más desordenado.

 1
Author: winwaed,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-20 20:58:55

Este tema se describe brevemente en wikipedia y harding.

Http://en.wikipedia.org/wiki/Comparison_of_C_Sharp_and_Visual_Basic_.NET http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

Simplemente revisa y toma tus notas sobre eso.

 1
Author: Durgesh Khandal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-14 07:01:43

Cuando llega a IL es todo sólo bits. Esa insensibilidad a mayúsculas y minúsculas es solo un pase precompilador. Pero el consenso general es, vb es más detallado. Si puedes escribir c# por qué no guardar tus ojos y manos y escribir la menor cantidad de código para hacer lo mismo.

 0
Author: DevelopingChris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-15 04:18:07

Una diferencia evidente está en cómo manejan los métodos de extensión (Vb.Net en realidad permite algo que C# no-pasar el tipo en el que el método de extensión se define como ref): http://blog.gadodia.net/extension-methods-in-vbnet-and-c /

 0
Author: Vaibhav,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-17 18:30:56

Scott Hanselman recientemente escribió un interesante artículo contrastando var y Dim: Back to Basics: var != Dim

 0
Author: Adam Lassek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-18 18:08:13

Sí VB.NET se corrigieron la mayoría de los problemas de VB6 y se convirtió en un lenguaje OOP adecuado-ie. Similar en habilidades a C#. Aunque tiendo a preferir C#, encuentro útil la vieja construcción VB ON ERROR para manejar tiempos de espera de interop COM. Algo para usar sabiamente sin embargo-EN EL ERROR se abusa fácilmente!!

 0
Author: winwaed,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-03 02:10:09