En inglés: Friend assemblies. Es la posibilidad que desde un
ensamblado puedas acceder a los tipos y demás código que están declarados
como Friend en otro ensamblado. Como sabrás, todo lo que se declare como
Friend (internal en C#) solo será accesible desde el propio ensamblado.
De esto te hablé con anterioridad. Pulsa en este link
para
saber sobre los
ensamblados amigos,, tanto en Visual Basic 9.0 como en C# 2.0 y
posterior.
En inglés: Relaxed delegates. La relajación de delegados es algo
que C# 2.0 (C# 2005) ya tenía, aunque
en Visual Basic 9 se ha "ampliado".
Lo que significa es que si en un parámetro de un delegado se espera un tipo
de datos, se puede usar otro que esté en la misma jerarquía de clases (contravarianza).
Por ejemplo, si el delegado define un parámetro que deba ser el tipo
RoutedEventArgs, tipo que se deriva de EventArgs,
y éste último de Object, la contravarianza permite que
podamos usar cualquiera de esos tipos que estén en la jerarquía de tipos (es
decir en el árbol de herencia).
Pero en Visual Basic 9 esa relajación llega al extremo de incluso NO estar
obligado a indicar ningún tipo de argumento. Esto último es muy práctico en
el caso de los métodos de evento. Por ejemplo, si en el evento Click
de un control no queremos indicar ningún parámetro, pues... ¡no hace falta
indicarlo!
Por tanto, podemos definir un método del evento Click de
esta forma:
Private Sub Button1_Click() Handles Button1.Click
MessageBox.Show("Has pulsado en el botón", _
"Relajación de delegados")
End Sub
Por supuesto, puedes seguir usando la forma "habitual":
Private Sub Button2_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) _
Handles Button2.Click
' Esta es la forma normal
End Sub
O la "relajada", fíjate que el segundo parámetro está definido
como Object, esto si se puede hacer en C#:
Private Sub Button3_Click(ByVal sender As Object, _
ByVal e As Object) _
Handles Button3.Click
' El segundo parámetro está "relajado"
End Sub
En inglés: Runtime agility. Esto más o menos viene a significar
que los programas de Visual Basic
2008 (o VB9) ya no necesitan obligatoriamente que se compile usando el
runtime de Visual Basic, algo que hasta ahora siempre ha sido así, es decir,
lo quisieras o no, siempre se incluía una referencia a la librería
Microsoft.VisualBasic.dll.
Ahora con Visual Basic 9.0, si no quieres que se incluya esa DLL o
quieres usar otra diferente a la "por defecto", puedes
compilar con la opción /vbruntime, pero tendrás que hacerlo
desde la línea de comandos, ya que el Visual Studio 2008 (o el IDE de Visual
Basic 2008)
no lo soporta.
Pero no solo significa que no uses un runtime de VB, sino que puedes
indicar cual quieres usar... aunque esto en realidad solo será "válido" para
el tema de SilverLight o de Compact Framework, al menos cuando haya otros
"runtimes
de VB" que se puedan usar.
Si quieres saber más, puedes ver el post de Paul Vick:
VB Runtime agility, Orcas and new platforms.
Esto no lo he podido probar, ya que "supuestamente" estará
en la Beta 2, aunque si buscas en la ayuda de la CTP de Junio, si que te
dice que existe esa opción del compilador.
Para que te hagas una idea, usar esa opción en el compilador vendría a
equivaler a solo poder usar las clases de .NET, es decir, nada de My,
ni nada de esas cosas que VB ya incluye. Aunque eso sí, los ejecutables son
"más pequeños", al menos en todo lo que se refiere al "soporte" para el
runtime de VB y los "Mys".
Y según me ha dicho un "pajarito" sólo se permiten clases, es decir, que no
puedes compilar nada que tenga un módulo de VB, es decir, no soporta el
"tipo" Module. Sí, Module es una
característica "propia" de VB. Aunque el compilador seguirá creando
automáticamente el constructor, etc., aunque eso también lo hace el
compilador de C#.
En inglés es: Calling Object members on interfaces y significa
que en una variable del tipo de una interfaz se puede llamar a métodos
definidos en Object, por ejemplo ToString.
Y como te puedes imaginar, si en la clase que implementa la interfaz define
su propia versión de ese método, pues se usará esa implementación.
Aquí tienes un ejemplo:
Module Module1
Sub Main()
Dim ip As IPrueba = New Prueba
ip.Mostrar()
Console.WriteLine(ip.ToString())
Console.ReadKey()
End Sub
End Module
Interface IPrueba
Sub Mostrar()
End Interface
Class Prueba
Implements IPrueba
Public Sub Mostrar() Implements IPrueba.Mostrar
Console.WriteLine("Hola desde Prueba")
End Sub
Public Overrides Function ToString() As String
Return "ToString en la clase Prueba"
End Function
End Class
Esto en C# 2.0 (C# 2005) ya se podía hacer.
En inglés: Ternary operator. Esto es algo que Visual Basic nunca
ha tenido y muchos "pedíamos", en C/C#
es el operador ?: que se usa de esta forma:
string s = 10>5? "10 es mayor que 5":"10 no es mayor que 5";
Es decir, se evalúa una expresión y si se cumple, se usa lo que hay
después de la interrogación ?, si no se cumple, se usa lo
que haya después de los dos puntos
:.
En Visual Basic 9.0 se usa con el IF normal, pero en
"modo función", y
sería el equivalente a IIF, con la ventaja de que el tipo
de datos devuelto
no hay que "convertirlo", ya que si lo que se devuelve es una cadena, pues
el tipo devuelto (o valor) es una cadena, que es un tipo Double,
pues... es
decir, está "mejorado" con respecto a lo que teníamos con el actual
IIF.
La forma de usar el operador ternario en Visual Basic 2008 es esta:
Dim s As String = If(10 > 5, "10 es mayor que 5", "10 no es mayor que 5")
En inglés: Improved generic type inferencing. Pues... déjame que
lo piense... ¡ni idea! aunque supongo que será como lo de los delegados
relajados, pero con parámetros genéricos, es decir, si hay varios parámetros
genéricos que en un tipo se define de una forma y en otro de otra, por
ejemplo, Long e Integer, pues se usará el
que sea más "amplio" o que tenga más capacidad, en este caso el Long
(o desea como lo ha traducido
el traductor automático ese).
Cuando vea algún ejemplo de esto, pues... te lo explicaré mejor, pero ahora
mismo me "pilla" off... :(
Ir al índice de las
novedades de Visual Basic 2008 (VB 9.0)