En post anteriores:
Lo nuevo de CSharp (Parte 1)
Lo nuevo de CSharp (Parte 2)
había escrito sobre algunas características nuevas que aparecen en el CSharp 3, que vendrá integrado en el Visual Studio 2008, y que estoy probando en la beta 2 de esta IDE.
Veamos ahora un ejemplo en VB.NET 9 (como se lo llama), disponible en VbNetNew1.zip
Es un simple programa de consola, que utiliza una clase Supplier:
Public Class Supplier
Private mSupplierId As Integer
Private mName As String
Private mCity As String
Public Sub New(ByVal id As Integer)
mSupplierId = id
End Sub
Public Property SupplierId() As Integer
Get
Return mSupplierId
End Get
Set(ByVal value As Integer)
mSupplierId = value
End Set
End Property
Public Property Name() As String
Get
Return mName
End Get
Set(ByVal value As String)
mName = value
End Set
End Property
Public Property City() As String
Get
Return mCity
End Get
Set(ByVal value As String)
mCity = value
End Set
End Property
End Class
No encontré que el nuevo VB.NET tuviera propiedades automáticas, como en el nuevo CSharp. Así que en este ejemplo, el código de la clase no muestra nada nuevo.
En la rutina Main:
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 }
7
8 For Each supplier As Supplier In suppliers
9 Console.WriteLine("{0} {1}", supplier.SupplierId, supplier.Name)
10 Next
11
12 Dim c = New With {.Name = "John Doe", .City = "Everywhere"}
13
14 Console.WriteLine("{0} lives in {1}", c.Name, c.City)
15
16 For Each supplier As Supplier In suppliers
17 supplier.Print()
18 Next
19
20 Console.ReadLine()
21 End Sub
22
comienza a aparecer algunas características nuevas. En la línea 2, vemos la creación e inicialización de un arreglo, con el uso de llaves. En la línea 3, 4 y 5, aparece la creación de objetos con uso de With. Esto permite, llamar a un constructor, como Supplier(1), y luego completar las propiedades, con punto más el nombre de la propiedad.
En la línea 12, podemos crear una variable con un tipo implícito. Vemos que el new no refiere a ninguna clase en particular, pero en el with se colocan las propiedades que va a tener ese objeto.
Automáticamente, el IDE "arma" el tipo de la variable c, y me permite usar c.Name y c.City en la línea 14. La IDE hace inferencia de tipo.
En la línea 17, Print no es un método de la clase Supplier. Está definido en otra "clase":
Imports System.Runtime.CompilerServices
Module Extensions
<Extension()> _
Public Sub Print(ByVal supplier As Supplier)
Console.WriteLine("Supplier {0} {1}", supplier.SupplierId, supplier.Name)
End Sub
End Module
Es un extension method: un método que se puede definir para las instancias de una clase, fuera de la misma definición de la clase. En CSharp, vimos que se usaban clases estáticas. Acá se utilizan módulos. Para que el método fuera de extensión, en CSharp se colocaba un this adornando al primer parámetro. Acá se usa el atributo <Extension()> al método, un atributo que está en el namespace System.Runtime.CompilerServices.
Ya vendrá otro post con otras características.
Nos leemos!
Angel "Java" Lopez
http://www.ajlopez.com/