Microsoft este mes se enviará Visual Studio 2010, que incorpora la versión 10 de Visual Basic (a veces referido como VB 2010 o VB10). Esta versión, sin embargo, el más potente, contiene numerosas características que ahorran tiempo que ayudan a los desarrolladores a hacer más con menos líneas de código. Aquí está todo lo que necesita saber para comenzar a ejecutar con Visual Basic en Visual Studio 2010.
COEVOLUCIÓN
En el pasado, Visual Basic y C # son desarrollados por equipos independientes, que a menudo resultaba en las características que aparecen en un idioma antes que el otro. Por ejemplo, C # se había auto-aplicado las propiedades y los inicializadores de colección, que no estaban en Visual Basic y Visual Basic tenía características tales como finales de los parámetros obligatorios y opcionales que no están en C #. Pero cada vez que una característica apareció en uno de los idiomas, muchos clientes que pedir que la capacidad adicional a la otra también.Para hacer frente a esta información, Microsoft se fusionó el Visual Basic y C # equipos, adoptando una estrategia de co-evolución. La intención es hacer que las lenguas avanzar juntos. Cuando la funcionalidad principal es introducido en un idioma, debería aparecer en el otro también. Esto no quiere decir que todas las características estarán en ambos idiomas y funcionan exactamente de la misma manera, de hecho, cada idioma tiene su propia historia, el espíritu y sentir-los rasgos que son importantes para mantener. Coevolución significa que cualquier tarea que usted puede hacer en un idioma debe ser tan simple en la otra.
En el. NET Framework 4, Visual Basic y C # se han dado pasos de gigante hacia este objetivo, cada uno añadiendo una serie de capacidades de la otra ya tenía. Coevolución no es sólo sobre el pasado, sin embargo, es también la estrategia para futuras innovaciones en los idiomas. En ese espíritu,. NET Framework 4 introduce nuevas y potentes características, como el Dynamic Language Runtime, Tipos de incrustar la interoperabilidad y la variación genérica, en los dos idiomas al mismo tiempo, permitiendo que los desarrolladores de Visual Basic y C # para aprovechar al máximo. NET Framework.
NUEVAS CARACTERÍSTICAS DE VISUAL BASIC 2010
Las nuevas características de Visual Basic 2010 están diseñados para ayudarle a hacer más en menos líneas de código.Nosotros (el equipo de diseño de Visual Basic) se veía en los lugares donde los desarrolladores a menudo tienen que escribir mucho código repetitivo y tedioso investigado formas de conseguir el compilador para hacer el trabajo en su lugar. Ese es el panorama, ahora vamos a profundizar en algunas de las características de uno en uno.CONTINUACIÓN DE LÍNEA IMPLÍCITA
Visual Basic es un lenguaje orientado a líneas que utiliza clara, Inglés-como sintaxis para mejorar la legibilidad. Pero que a menudo resulta en código que se ejecuta con el límite de 80 caracteres por línea, obligando a los desarrolladores para desplazarse mucho. Usted puede utilizar el carácter de subrayado para indicar al compilador que debe mantener el procesamiento de la siguiente línea como parte de la actual (es decir, el tratamiento de múltiples líneas físicas en una sola línea, lógico). Pero tener que escribir repetidamente subraya siempre ha sido molesto, y de hecho, durante años el número 1 petición de función ha sido para el compilador de "sólo con ello."Pues bien, en Visual Basic 2010, el compilador puede. Ahora sabe que las fichas (como las comas, paréntesis y operadores) tienden a ocurrir justo antes de que el carácter de continuación de línea, y se inserta el carácter para que los desarrolladores ya no necesitan. Por ejemplo, poniendo fin a una instrucción de Visual Basic con una coma no es legal, el compilador sabe, así que cuando se ve una cadena de componentes léxicos que se ve como {coma, entrar} , se infiere la presencia de la marca de continuación de línea, como el ejemplo de la La figura 1 muestra.
Figura 1 Continuación Inferir línea
<Extension()> Función FilterByCountry ( Los clientes de ByVal como IEnumerable (Of Customer), País ByVal As String) As IEnumerable (Of Customer) Consulta Dim = C En los clientes de Donde c.Country = país Seleccione <Customer> <% = c.Name y "," & c.Country %> </ Cliente> Volver consulta End Function
- Después de la <Extension()> atributo
- Después de la ((abrir paréntesis) en la declaración del método
- Después de la, (coma) para el primer parámetro
- Antes de la) (cierre paréntesis) en la declaración del método
- Después de la = (signo igual)
- Después de que el <% = (etiqueta de apertura de una expresión incrustada)
- Después de cada & (y comercial) en el literal XML
- Antes de que el%> (etiqueta de cierre para una expresión incrustada)
Figura 2 , donde los personajes están implícitos Continuación
Muestra | Antes | Después de |
, (Coma),. (Punto),> (atributos), ({(entre paréntesis abierto), <% = (comienza expresión incrustada (literales XML)) | X | |
),},] (Corchetes cerca),%> (cerca de expresión incorporado) | X | |
Todas las palabras clave de LINQ:
Conjunto, distinto, de, Grupo A, Grupo Ensamble, Ensamble, Vamos, Ordenar por, seleccionar, Saltar, saltar mientras, toma, toma tiempo, donde, en, en, encendido, ascendente, descendente
| X | X |
Los operadores:
+, -, *, /, \, ^,>>, <<, Mod, y, + =, -=, *=, / =, \ =, ^ =,>> =, <<=, y = , <, <=,>,> =, <>, es, IsNot, como, y, OR, XOR, AndAlso, OrElse
| X | |
Con (en un inicializador de objeto) | X |
LAMBDAS DE INSTRUCCIÓN
El lambda término puede sonar intimidante al principio, pero una lambda es sólo una función definida dentro de otra función. Visual Basic 2008 introduce las expresiones lambda con la palabra clave de función:Clientes As Cliente () = ... Array.FindAll (clientes, la función (c) c.Country = "Canadá")
Consulta Dim = Array.FindAll (clientes, AddressOf filtro) ... Función de filtro (ByVal c como cliente) As Boolean Volver c.Country = "Canadá" End Function
Array.ForEach (clientes, la función (c) Console.WriteLine (c.Country))
"Error de compilación:" La expresión no produce un valor. "
Array.ForEach (clientes, Sub (c) Console.WriteLine (c.Country))
Array.ForEach (clientes, Sub (c) Console.WriteLine ("Nombre del país:") Console.WriteLine (c.Country) End Sub)
AddHandler b.Click, Sub (sender As Object, e As EventArgs) MsgBox ("botón pulsado") 'Insertar una lógica más compleja aquí End Sub
AddHandler b.Click, Sub () MsgBox ("botón pulsado") 'Insertar una lógica más compleja aquí End Sub
Además de las lambdas Sub de una sola línea y de varias líneas lambdas Sub hemos visto hasta ahora, Visual Basic 2010 también es compatible con varias líneas lambdas Función:
Consulta Dim = customers.Where (function (c) "Volver sólo los clientes que no se han guardado 'Insertar una lógica más compleja aquí Volver c.ID = -1 End Function)
Método de dim = función (producto As String) Si el producto = "Papel" Entonces Volver 4,5 "unidades en stock Más Rendimiento del 10 '10 de todo lo demás End If End Function MsgBox (método ("Papel"))
Delegar la función $ $ compilerGeneratedName (producto As String) As Double
"Observe el" As Single " Método de dim = función (producto As String) As Single Si el producto = "Papel" Entonces Volver 4,5 "unidades en stock Más Rendimiento del 10 '10 de todo lo demás End If End Function
También puede tomar el control del tipo de cambio de forma explícita, en cuyo caso el compilador no intentará deducir el tipo. En lugar de confiar en el compilador para inferir el tipo de delegado, es muy común para asignar una lambda a una variable que tiene un tipo de delegado explícitos:
Método de As Func (Of String, Single) = La función (de productos) Si el producto = "Papel" Entonces Volver 4,5 "unidades en stock Más Rendimiento del 10 '10 de todo lo demás End If End Function
Delegar la función Func (Of T, R) (param ByVal como T) Como R
PROPIEDADES AUTOIMPLEMENTADAS
En Visual Basic, las propiedades son miembros de la clase que se utiliza para exponer el estado de un objeto con el mundo exterior. Una declaración de propiedad típica se ve algo como esto:_Country Privado As String Casa de campo As String Obtener Volver _Country End Get Set (ByVal Value As String) _Country = Valor Ajuste final End Property
Casa de campo As String
Una de las cosas interesantes que puedes hacer con el auto propiedades implementadas se especifica que los inicializadores de establecer el valor predeterminado de la propiedad cuando el constructor se ejecuta. Un escenario común con las clases de entidad, por ejemplo, establece la clave principal a algo parecido a -1 para indicar que está en un estado no guardado. Esto es lo que ese código se vería así:
Propiedad ID As Integer = -1
OrderList propiedad como una lista (de orden) = Nueva lista (de orden)
Propiedad OrderList Como nueva lista (de orden)
Propiedad OrderList Como nueva lista (de orden) con {. Capacidad = 100}
Nombre de la propiedad como secuencia Obtener End Get Set (ByVal Value As String) Ajuste final End Property
- Gran parte de la. NET de enlace de datos de obras de infraestructura contra las propiedades, pero no los campos.
- Una interfaz no puede hacer valer la existencia de un campo, sino que puede cumplir de una propiedad.
- Las propiedades proporcionan una mayor flexibilidad a largo plazo para el cambio de reglas de negocio. Por ejemplo, supongamos que alguien introduce la regla de que un número de teléfono debe ser de 10 dígitos. No hay manera de realizar esta validación al asignar a un campo público. Cambio de un campo público de una propiedad es un cambio importante en escenarios como la serialización binaria y la reflexión.
INICIALIZADORES DE COLECCIÓN
. Una práctica común NET es crear una instancia de una colección y después llenarla llamando al método Add de una vez por cada elemento:Dígitos As New List (Of Integer) digits.Add (0) digits.Add (1) digits.Add (2) digits.Add (3) digits.Add (4) digits.Add (5) digits.Add (6) digits.Add (7) digits.Add (8) digits.Add (9)
Dígitos dim = Nueva lista (Of Integer) de {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
Dígitos As New List (Of Integer) de {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
Usted puede utilizar inicializadores de colección en contra de cualquier tipo que cumpla con los siguientes requisitos:
- Se puede iterar sobre ella con un For Each-declaración, es decir, que implementa IEnumerable. (Para una definición más precisa / detallada de un tipo de colección, véase la sección 10.9.3 de la especificación del lenguaje Visual Basic en msdn.microsoft.com/library/aa711986 (VS.71). Aspx).
- Cuenta con una accesible (no necesariamente pública) sin parámetros de constructor.
- lt tiene un accesible (no necesariamente pública) de la instancia o método de extensión denominado add.
LookupTable As Nuevo Diccionario (Of Integer, String) Desde {{1, "One"}, {2, "dos"}, {3, "Tres"}, {4, "cuatro"}}
LookupTable As Nuevo Diccionario (Of Integer, String) lookupTable.Add (1, "One") lookupTable.Add (2, "Dos") lookupTable.Add (3, "Tres") lookupTable.Add (4, "Cuatro")
También puede proporcionar su propia implementación Agregar personalizado mediante un método de extensión:
<Extension()> Sub Add (ByVal como fuente IList (Of Customer), ByVal id As Integer, Nombre ByVal As String, ByVal ciudad As String) source.Add (nuevo cliente con { . ID = id, . Nombre = nombre, . City = ciudad }) End Sub
Lista Dim = Nueva lista (del cliente) de { {1, "Jon", "Redmond"}, {2, "Bob", "Seattle"}, {3, "Sally", "Toronto"} }
Estados como Nueva lista de la propiedad (Of String) Desde {"AL", "AK", "AR", "AZ", ...}
LOS LITERALES DE MATRIZ
Además de las más poderosas formas de trabajar con tipos de colección, 2010 de Visual Basic también proporciona algunas grandes mejoras para trabajar con matrices. Considere el siguiente código (que funciona bien en versiones anteriores):Números de As Integer () = new Integer () {1, 2, 3, 4, 5}
Números de dim = {1, 2, 3, 4, 5}
Números de dim = {1, 2, 3, 4, 5.555}
Números de dim = {1, 2, 3, 4, "5"}
Los literales de matriz se pueden anidar en cualquier forma multi-dimensional arrays o matrices escalonadas:
'2 Matriz unidimensional Dim matriz = {{1, 0}, {0, 1}} "Matriz escalonada - la evaluación de la fuerza entre paréntesis de la matriz interna primero Dim irregular = {({1, 0}), ({0, 1})}
DYNAMIC LANGUAGE RUNTIME
Aunque técnicamente es un lenguaje estático en el fondo, Visual Basic siempre ha tenido las capacidades dinámicas muy potentes, como el enlace en tiempo. Visual Studio 2010 viene con una nueva plataforma llamada Dynamic Language Runtime (DLR), que hace que sea más fácil de construir y la comunicación entre los dinámicos idiomas. Visual Basic 2010 se ha actualizado para apoyar plenamente la DLR en su latebinder, permitiendo a los desarrolladores utilizar las bibliotecas y los marcos desarrollados en otros lenguajes como IronPython / IronRuby.Lo bueno de esta función es que nada ha cambiado sintácticamente (de hecho, no una sola línea de código fue modificado en el compilador para admitir esta función). Los desarrolladores todavía puede hacer las operaciones en tiempo de ejecución de la misma manera que en las versiones anteriores de Visual Basic. Lo que ha cambiado es el código en el Visual Basic Runtime (Microsoft.VisualBasic.dll), que ahora reconoce la interfaz IDynamicMetaObjectProvider que el DLR ofrece. Si un objeto implementa esta interfaz, el tiempo de ejecución de Visual Basic se construirá un CallSite DLR y permitir que el objeto y el lenguaje proporciona para inyectar su propia semántica en la operación.
Por ejemplo, las bibliotecas estándar de Python contiene un archivo llamado random.py con un método llamado aleatoria que se puede utilizar para reorganizar al azar los elementos de una matriz. Llamar es simple:
Dim Python como ScriptRuntime Python.CreateRuntime = () Dim azar como objeto = python.UseFile ("random.py") Artículos Dim = {1, 2, 3, 4, 5, 6, 7} random.shuffle (artículos)
Ese es un ejemplo de invocar una API DLR-enabled, pero también es posible que los desarrolladores crear sus propias API que utilizan esta característica. La clave es implementar la interfaz IDynamicMetaObjectProvider, en cuyo caso los compiladores de Visual Basic y C # se reconoce que el objeto tiene especial semántica dinámica. En lugar de implementar la interfaz de forma manual, es más fácil heredar de la clase System.Dynamic.DynamicObject (que ya se implementa esta interfaz) y acaba de superar un par de métodos. Figura 3 muestra un ejemplo completo de crear un objeto personalizado dinámico (una propiedad " bolsa "que aparece para crear propiedades sobre la marcha) y decir que es el uso normal de Visual enlace en tiempo de base. (Para más información sobre cómo trabajar con DynamicObject, ver el excelente artículo de Doug Rothaus 'en blogs.msdn.com/vbteam/archive/2010/01/20/fun-with-dynamic-objects-doug-rothaus.aspx .)
Figura 3 Creación de un objeto dinámico personalizado y llamándola con enlace en tiempo de Visual Básico
Las importaciones System.Dynamic Module Module1 Sub Main () Dim p como objeto PropertyBag = Nuevo p.One = 1 p.Two = 2 p.Three = 3 Console.WriteLine (p.One) Console.WriteLine (p.Two) Console.WriteLine (p.Three) End Sub PropertyBag clase: Inherits DynamicObject Los valores privados como Nuevo Diccionario (Of String, Integer) Público está por sobre la función TrySetMember ( ByVal cuaderno como SetMemberBinder, ByVal Value As Object) As Boolean valores (binder.Name) = valor Devolver True End Function Público está por sobre la función TryGetMember ( ByVal cuaderno como GetMemberBinder, ByRef resultado As Object) As Boolean Volver values.TryGetValue (binder.Name, resultado) End Function Fin de la clase End Module
VARIANZA GENÉRICA
Esta es una característica que puede sonar muy complicado (con términos como covarianza y contravarianza) al principio, pero en realidad es bastante simple. Si usted tiene un objeto de tipo IEnumerable (de Apple) y desea asignar a un IEnumerable (de fruta), que debe ser legal, ya que cada manzana es una fruta (forzado por una relación de herencia). Desafortunadamente, antes de Visual Basic 2010, la variación genérica no fue apoyada en el compilador, a pesar de que en realidad fue apoyado en el Common Language Runtime (CLR).Consideremos el ejemplo de la Figura 4 . En Visual Basic 2008, el código en la Figura 4 se generará un error de compilación (o si Option Strict está apagado, una excepción en tiempo de ejecución) en la línea Dim enabledonly. La solución fue llamar al método de extensión fundido, como se muestra aquí.:
"Manera antigua, el llamado a la Conversión de tipos (de control) ya no es necesario en VB 2010 Dim enabledonly = FilterEnabledOnly (buttons.Cast (de control))
Interfaz IEnumerable (de los T) ... Fin de interfaz
Option Strict On Clase pública Form1 Sub Form1_Load () Handles MyBase.Load Botones As New List (Of Button) Desde { Nuevo botón con { . Nombre = "btnOk", . Enabled = true }, Nuevo botón con { . Nombre = "btnCancel", . Enabled = False } } Dim enabledonly = FilterEnabledOnly (botones) End Sub Función FilterEnabledOnly ( Controles de ByVal como IEnumerable (Of Control) ) Como IEnumerable (Of Control) Regreso de la c En los controles Donde c.Enabled = true End Function Fin de la clase
Delegar la función Func (Of A T, Out R) (param ByVal como T) Como R
Lo bueno de variación genérica es que es una característica que realmente no tiene que preocuparse, si es que está haciendo su trabajo, nunca lo notará. Situaciones que se utiliza para provocar los errores de compilación o que requieren una llamada. Cast (Of T) debería funcionar bien en Visual Basic 2010.
MEJORA DE LOS PARÁMETROS OPCIONALES
Los parámetros opcionales proporcionan una característica de la productividad de la mano que permite a los desarrolladores que los métodos más flexibles y evitar la contaminación de una clase con numerosas sobrecargas de un método. Una de las limitaciones en el pasado fue que los parámetros opcionales no puede ser anulable (o de hecho cualquiera que no sea intrínseca tipo de estructura). Visual Basic 2010 ahora le permite definir los parámetros opcionales de cualquier tipo de valor:Sub displayorder (ByVal como cliente del cliente, OrderID ByVal As Integer, Unidades opcionales de ByVal como número entero? = 0, Opcional backgroundColor ByVal As Color = Nothing) End Sub
INSERTAR LA INTEROPERABILIDAD DE LOS TIPOS
Para las aplicaciones que realizan la interoperabilidad COM, un punto débil común es tener que trabajar con ensamblados de interoperabilidad primarios (PIA). Un PIA es un montaje. NET que sirve como un contenedor en tiempo de ejecución (RCW) sobre un componente COM y tiene un GUID único para identificarlo. . NET asambleas comunicarse con un PIA, que luego se lleva a cabo cualquier clasificación necesaria para mover datos entre COM y NET..Desafortunadamente, la PIA puede complicar la implementación, ya que son archivos DLL adicionales que deben ser desplegados a las máquinas de los usuarios finales. También pueden causar problemas de control de versiones, por ejemplo, si quieres una aplicación para poder trabajar en contra de Excel 2003 y Excel 2007, que había necesidad de implementar tanto PIA con la aplicación.
La interoperabilidad de incrustar tipos de entidades incrusta directamente en la aplicación, pero sólo los tipos y miembros de la PIA que son absolutamente necesarias, eliminando así la necesidad de PIA que se desplegarán a las máquinas de los usuarios finales.
Para activar esta función de un proyecto existente (que ya está activado por defecto para las nuevas referencias), seleccione la referencia en el Explorador de soluciones y cambiar la interoperabilidad de incrustar tipos de opción en la ventana de propiedades (ver Figura 5 ). O, si la compilación con el compilador de línea de comandos, utilice el l / (o / link) en lugar de cambiar la r / y la referencia /.
Figura 5 Habilitación de la interoperabilidad de incrustar tipos de características en el Explorador de soluciones
Una vez que haya convertido a esta función, la aplicación ya no tiene una dependencia en el PIA. De hecho, si se abre el conjunto de reflector o ildasm, te darás cuenta de que en realidad no hay ninguna referencia al PIA en lo absoluto.
MULTI-TARGETING
La cosa más fresca sobre todas las características de Visual Basic es que 2010 incluso se puede utilizar en proyectos destinados a. NET Framework 2.0 a través de. NET Framework 3.5. Esto significa que la continuación de línea implícita, literales de matriz, inicializadores de colección, lambdas de instrucción, auto-propiedades implementadas y así sucesivamente todos los que trabajan en los proyectos existentes sin tener que redirigir a. NET Framework 4.La única excepción es Incrustar tipos de interoperabilidad, que tiene una dependencia en los tipos que están sólo en el NET Framework 4,. Como resultado que no se puede utilizar cuando la orientación versiones NET Framework 2.0 a 3.5..Además, los tipos que están marcados como variante sólo se marcan de esa manera en el. NET Framework 4, por lo que en el ejemplo anterior, usted todavía tiene que llamar. Cast (Of T) al orientar las versiones 2.0 a 3.5. Puede, sin embargo, hacer su propia variante tipos (con la entrada / salida modificadores) al orientar las versiones anteriores.
Para cambiar el marco actual objetivo de una aplicación, haga doble clic en Mi proyecto, haga clic en la ficha Compilar, haga clic en Opciones de compilación avanzadas y seleccione de la lista desplegable en la parte inferior.
Cuando se compila desde la línea de comandos, en realidad hay ningún interruptor de línea de comandos para habilitar esta característica. En cambio, el compilador busca en el cual la Asamblea siempre que la definición de System.Object (por lo general mscorlib) y que marco la asamblea tiene como objetivo, a continuación, los sellos que el valor en el ensamblado de salida. (Este es el mismo mecanismo que el compilador utiliza en la construcción de conjuntos de Silverlight.) Cuando se utiliza el IDE, todo esto sucede de manera transparente, por lo que en general no es algo que hay que preocuparse.
¡PRUÉBELO
Como puede ver, Visual Basic 2010 tiene muchas características de gran alcance que le permiten ser más productivos al escribir menos líneas de código, la descarga más trabajo para el compilador. En este artículo, sólo he mirado las características del lenguaje, pero el IDE Visual Basic 2010 también tiene un montón de grandes mejoras. He aquí una lista parcial:- Para navegar
- Las referencias de relieve
- Generar a partir de Uso
- Mejor IntelliSense (subcadena coincidente, el camello de los casos de consulta, sugerencia modo, útil para "primera prueba" estilos de desarrollo)
- Soporte multi-monitor
- Zoom
¿Quieres más de Visual Basic? Ya lo tienes. MSDN Magazine es la reanudación de la publicación mensual de la columna Instintos básicos, que se centra en el desarrollador de Visual Basic y otros temas relacionados, y está escrito por el equipo de Visual Basic de Microsoft.
Fuente: Microsoft
No hay comentarios:
Publicar un comentario