27.8.07

Shadows en vez de Overloads

Hemos tenido hace unos meses una discusion interna en Solid Quality sobre un bug/feature de Visual Basic 2005.

La discusion la ha iniciado Eugenio Serrano, los dejo aqui con sus comentarios:

Public Class ComprobantePadre
Public ReadOnly Property Nombre() As String
Get
Return "ComprobantePadre"
End Get
End Property
End Class


Public Class Comprobante
Inherits ComprobantePadre

Overloads ReadOnly Property Nombre() As String
Get
Return "Comprobante"
End Get
End Property
End Class

Amigos: Increiblemente esto compila en Visual Basic 2005, lo mas increible es que en la propiedad nombre de Comprobante oculta a la propiedad Nombre de la clase ComprobantePadre...
Se comporta exactamente igual como si hubiera puesto Shadows en vez de Overloads.

A no ser que se me este pasando algo muy grande que no logro ver, realmente no entiendo como puede compilar esto.
Estoy diciendo que quiero hacer una sobrecarga y tienen exactamente la misma firma.
Obviamente el equivalente a C# de esto no compila ni a palos

3 comentarios:

acyrman dijo...

Adolfo,

Si el código equivalente al VB es así:

class ComprobantePadre
{
public string Nombre
{
get { return "ComprobantePadre"; }
}

class Comprobante : ComprobantePadre
{
public string Nombre
{
get { return "Comprobante"; }
}
}


entonces si compila pero da un warning precisamente advirtiendo que se está ocultando un miembro de la clase padre.
Saludos!

AW dijo...

Exactamente ese el punto! C# si protege antes esto, pero VB no lo hace.

Se deberia forzar a utilizar el Shadows (o new en C#) o el overrides para indicar explicitamente cual es la intención del programador.

Anónimo dijo...

Thanks for sharing the link, but unfortunately it seems to be down... Does anybody have a mirror or another source? Please reply to my post if you do!

I would appreciate if a staff member here at awiernik.blogspot.com could post it.

Thanks,
James