Lo nuevo en Visual Basic.NET (Parte 2)

Ya visité algunas características nuevas de VB.NET 9, que viene integrado en el Visual Studio 2008. Estoy usando una beta 2. El artículo anterior es:

Lo nuevo en Visual Basic.NET (Parte 1)

El ejemplo de hoy está para descargarse en VbNetNew2.zip

Usa la misma clase Supplier. Investiguemos dos nuevos métodos del tipo extension methods:

 

Imports System.Runtime.CompilerServices Module Extensions <Extension()> _ Public Function Append(Of T)(ByVal a As T(), ByVal b As T()) As List(Of T) Dim result = New List(Of T)(a) result.AddRange(b) Return result End Function <Extension()> _ Public Sub Show(ByVal suppliers As IEnumerable(Of Supplier)) For Each supplier As Supplier In suppliers Console.WriteLine("Supplier {0} {1} ({2})", supplier.SupplierId, supplier.Name, supplier.City) Next End Sub End Module

Recordemos: los extension methods son métodos que se pueden adosar a instancias de clases ya existentes, justamente, extendiendo su funcionalidad.

En VB.NET, se escriben como métodos de un módulo, marcados con el atributo <Extension()> . El primer parámetro indica la clase a la cual adosarle este método.

En el método Append de arriba, lo nuevo es que se puede usar generics. Es un método que se aplica a todo arreglo, de cualquier tipo T. Y devuelve una lista tipada del mismo T.

El método Show, se usa adosa a todo IEnumerable de Suppliers, no importa la clase concreta que implemente esa interfaz.

Esto demuestra la flexibilidad del concepto de extension methods.

En el Main, se usa tanto el Append, para unir dos listas, como el Show, para mostrar una lista de proveedores:

 

1 Sub Main() 2 Dim suppliers() As Supplier = New Supplier() { _ 3 New Supplier(1) With {.Name = "John Madison", .City = "Washington"}, _ 4 New Supplier(2) With {.Name = "Ann Arbor", .City = "Ohio"}, _ 5 New Supplier(3) With {.Name = "Don Johnson", .City = "Miami"}, _ 6 New Supplier(4) With {.Name = "Bill Clinton", .City = "Washington"} _ 7 } 8 9 Dim suppliers2() As Supplier = New Supplier() { _ 10 New Supplier(5) With {.Name = "John Smith", .City = "New Jersey"}, _ 11 New Supplier(6) With {.Name = "Mary Dupinsky", .City = "Los Angeles"}, _ 12 New Supplier(7) With {.Name = "Ronald Reagan", .City = "Washington"}, _ 13 New Supplier(8) With {.Name = "Brad Shapiro", .City = "Dallas"} _ 14 } 15 16 Dim allsuppliers = suppliers.Append(suppliers2) 17 18 Console.WriteLine("All Suppliers") 19 allsuppliers.Show() 20 21 Dim suppliers3 = allsuppliers.FindAll(Function(s) s.City = "Washington") 22 23 Console.WriteLine() 24 Console.WriteLine("Suppliers In Washington") 25 26 suppliers3.Show() 27 28 Dim suppliers4 = From s In suppliers _ 29 Where s.City = "Washington" _ 30 Select s 31 32 Console.WriteLine() 33 Console.WriteLine("Suppliers In Washington") 34 35 suppliers4.Show() 36 37 Console.ReadLine() 38 End Sub 39

 


En la línea 21, se aplica un método de extensión ya definido en LINQ, para aplicar ubicar todos los elementos de una lista que cumplan con un predicado. Aparece el nuevo Function para especificar un predicado ahí mismo.


En la línea 28, se ve que podemos usar también LINQ directamente en el lenguaje. Como en el caso examinado en otro post con C Sharp, el from va primero, y al final, el select. Esto le facilita a la IDE que pueda determinar qué tido de datos puede seleccionar, habiéndole primero indicado cuál es el tipo que se recupera.


Nos leemos!


Angel “Java” Lopez
http://www.ajlopez.com/

This entry was posted in 1389, 5633. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>