Aprendí bastante navegando por las características ocultas de C # y me sorprendió cuando no pude encontrar algo similar para VB.NET.
¿Cuáles son algunas de sus características ocultas o menos conocidas?
vb.net
hidden-features
Sean Gough
fuente
fuente
costumbre
Enum
sUna de las características ocultas reales de VB es la
completionlist
etiqueta de documentación XML que se puede usar para crearEnum
tipos propios con funcionalidad extendida. Sin embargo, esta característica no funciona en C #.Un ejemplo de un código mío reciente:
Ahora, al asignar un valor a una variable declarada como
Rule
, el IDE ofrece una lista IntelliSense de posibles valores deRuleTemplates
./EDITAR:
Dado que esta es una característica que depende del IDE, es difícil mostrar cómo se ve esto cuando la usa, pero solo usaré una captura de pantalla:
Lista de finalización en acción http://page.mi.fu-berlin.de/krudolph/stuff/completionlist.png
De hecho, IntelliSense es 100% idéntico a lo que obtienes cuando usas un
Enum
.fuente
friend
o usando la misma clase que la enumeración: enRule
lugar deRuleTemplate
.¿Has notado el operador de comparación Me gusta?
Dim b As Boolean = "file.txt" Like "*.txt"
Más de MSDN
fuente
Typedefs
VB conoce un tipo primitivo de alias
typedef
víaImport
:Esto es más útil cuando se usa junto con tipos genéricos:
fuente
Imports
debería ser. ;-) De alguna manera, este error no se detectó (y obtuvo 28 votos a favor) durante casi todo un año.Imports Assert = xUnit.Assert
Oh! y no te olvides de XML Literals .
fuente
<string>This string contains "quotes" and it's OK.</string>.Value
(He encontrado esta especialmente útil al escribir pruebas en analizar archivos CSV en el que cada campo se comillas Sería. No diversión haber sido de escapar de todas estas citas de la mano en mi líneas de prueba.)¡La inicialización de objetos también está ahí!
fuente
DirectCast
DirectCast
es una maravilla En la superficie, funciona de manera similar alCType
operador en que convierte un objeto de un tipo a otro. Sin embargo, funciona con un conjunto de reglas mucho más estricto.CType
Por lo tanto, el comportamiento real suele ser opaco y no es del todo evidente qué tipo de conversión se ejecuta.DirectCast
solo admite dos operaciones distintas:Cualquier otra conversión no funcionará (por ejemplo, tratar de descomprimir un
Integer
a aDouble
) y generará un error de tiempo de compilación / tiempo de ejecución (dependiendo de la situación y de lo que se puede detectar mediante la verificación de tipo estático). Por lo tanto, lo usoDirectCast
siempre que sea posible, ya que esto captura mi mejor intención: dependiendo de la situación, quiero desempaquetar un valor de tipo conocido o realizar una transmisión. Fin de la historia.El uso
CType
, por otro lado, deja al lector del código preguntándose qué pretendía realmente el programador porque resuelve todo tipo de operaciones diferentes, incluida la llamada de código definido por el usuario.¿Por qué es esta una característica oculta? El equipo de VB ha publicado una directriz 1 que desalienta el uso de
DirectCast
(¡aunque en realidad es más rápido!) Para que el código sea más uniforme. Sostengo que esta es una mala guía que debería revertirse: siempre que sea posible, favorezcaDirectCast
alCType
operador más general . Hace que el código sea mucho más claro.CType
, por otro lado, solo se debe invocar si esto realmente se pretende, es decir, cuando se debe llamar a unCType
operador de estrechamiento (cf. sobrecarga del operador ).1) No puedo encontrar un enlace a la directriz, pero he encontrado la opinión de Paul Vick (desarrollador principal del equipo VB):
(EDITAR por Zack: Obtenga más información aquí: ¿Cómo debo transmitir en VB.NET? )
fuente
TryCast
ese entonces, ya que principalmente tenía un hueso para elegir con el uso generalizadoCType
.TryCast
solo funcionan en tipos de referencia, según la documentación.If
operador condicional y de fusión¡No está tan escondido como en desuso ! VB 9 tiene el
If
operador que es mucho mejor y funciona exactamente como el operador condicional y de fusión de C # (según lo que desee):Editado para mostrar otro ejemplo:
Esto funcionará con
If()
, pero causará una excepción conIIf()
fuente
:?
operador de C y Perl , no es solo una versión simplificada.Esta es buena. La declaración de Seleccionar caso dentro de VB.Net es muy poderosa.
Claro que existe el estándar
Pero hay más ...
Puedes hacer rangos:
Y aún más ...
Puede (aunque puede no ser una buena idea) realizar comprobaciones booleanas en múltiples variables:
fuente
Select Case True
es que parece que evalúa cada una de lasCase
declaraciones y ejecuta el código para cada una de ellas, lo cual es cierto. Pero, de hecho, los evalúa uno por uno y solo ejecuta el código para el primero, lo cual es cierto. La sintaxis paraIf
es mucho más clara a este respecto (If...Else If...Else If...Else
).Un gran ahorro de tiempo que uso todo el tiempo es la palabra clave With :
¡Simplemente no me gusta escribir más de lo necesario!
fuente
El mejor y más fácil analizador CSV:
Al agregar una referencia a Microsoft.VisualBasic, esto se puede usar en cualquier otro lenguaje .Net, por ejemplo, C #
fuente
(EDITAR: Obtenga más información aquí: ¿Debería usar siempre los operadores AndAlso y OrElse? )
fuente
Miembros estáticos en métodos.
Por ejemplo:
En la función anterior, la expresión regular de patrón solo se creará una vez, sin importar cuántas veces se llame a la función.
Otro uso es mantener una instancia de "aleatorio" alrededor:
Además, esto no es lo mismo que declararlo simplemente como un miembro compartido de la clase; los artículos declarados de esta manera también están garantizados para ser seguros para subprocesos. No importa en este escenario ya que la expresión nunca cambiará, pero hay otras en las que podría cambiar.
fuente
En vb hay una diferencia entre estos operadores:
/
seDouble
\
estáInteger
ignorando el restofuente
Realmente me gusta el espacio de nombres "Mi" que se introdujo en Visual Basic 2005. Mi es un acceso directo a varios grupos de información y funcionalidad. Proporciona acceso rápido e intuitivo a los siguientes tipos de información:
fuente
Eventos personalizados
Aunque rara vez es útil, el manejo de eventos se puede personalizar en gran medida:
Esto se puede probar de la siguiente manera:
fuente
Acabo de encontrar un artículo que habla sobre el "!" operador, también conocido como el "operador de búsqueda de diccionario". Aquí hay un extracto del artículo en: http://panopticoncentral.net/articles/902.aspx
fuente
Esto está integrado y es una ventaja definitiva sobre C #. La capacidad de implementar un método de interfaz sin tener que usar el mismo nombre.
Como:
fuente
Forzando ByVal
En VB, si ajusta sus argumentos en un conjunto adicional de paréntesis, puede anular la declaración ByRef del método y convertirlo en ByVal. Por ejemplo, el siguiente código produce 4, 5, 5 en lugar de 4,5,6
Consulte Argumento no modificado por llamada de procedimiento - Variable subyacente
fuente
Pasar parámetros por nombre y, por lo tanto, reordenarlos
Uso:
También se puede llamar utilizando la especificación del parámetro ": =" en cualquier orden:
fuente
La instrucción Using es nueva a partir de VB 8, C # la tuvo desde el principio. Llama a disponer automáticamente para usted.
P.ej
fuente
Los alias de importación también son en gran medida desconocidos:
fuente
Considere la siguiente declaración de evento
En C #, puede verificar si hay suscriptores de eventos utilizando la siguiente sintaxis:
Sin embargo, el compilador VB.NET no es compatible con esto. Realmente crea un campo de miembro privado oculto que no es visible en IntelliSense:
Más información:
http://jelle.druyts.net/2003/05/09/BehindTheScenesOfEventsInVBNET.aspx http://blogs.msdn.com/vbteam/archive/2009/09/25/testing-events-for-nothing-null-doug -rothaus.aspx
fuente
Si necesita un nombre de variable que coincida con el de una palabra clave, escríbalo entre corchetes. No nec. Sin embargo, es la mejor práctica, pero se puede usar sabiamente.
p.ej
Ejemplo de comentarios (@Pondidum):
fuente
Hay un par de respuestas sobre XML Literals, pero no sobre este caso específico:
Puede usar XML Literals para encerrar literales de cadena que de lo contrario tendrían que escapar. Literales de cadena que contienen comillas dobles, por ejemplo.
En lugar de esto:
Puedes hacerlo:
Esto es especialmente útil si está probando un literal para el análisis CSV:
(No tiene que usar la
<string>
etiqueta, por supuesto; puede usar cualquier etiqueta que desee).fuente
<q>
sería una buena etiqueta, similar al uso en Perl / Ruby. De todos modos, es un buen lenguaje. ¡ME GUSTA!DateTime se puede inicializar rodeando su fecha con #
También puede usar la inferencia de tipos junto con esta sintaxis
Eso es mucho mejor que usar el constructor
fuente
Puede tener 2 líneas de código en una sola línea. por lo tanto:
fuente
Call (New Something).CallAMethod()
Parámetros opcionales
Los opcionales son mucho más fáciles que crear una nueva sobrecarga, como:
fuente
El título de caso en VB.Net se puede lograr con un viejo VB6 fxn:
fuente
Propiedades con parámetros
He estado haciendo programación en C # y descubrí una característica que faltaba en VB.Net, pero que no se mencionó aquí.
Puede ver un ejemplo de cómo hacer esto (así como la limitación de c #) en: Uso de las propiedades típicas de obtención de conjunto en C # ... con parámetros
He extraído el código de esa respuesta:
fuente