Sí hay buenos argumentos, lo que ocurre es que no son aplicables siempre.
Norlamente es bueno fomentar la reutilización por composición y no por herencia, y con el "final" por defecto puedes fomentarlo. Además, tus contratos están más claros, menos sujetos a interpretación: si no pone virtual, no está pensado para que sobre-escribas ese método. En java, con la permisividad por defecto, ni dios pone "final" si no es que le hace falta (porque algo se utilice en un inner class o cosas así). Lo que ocurre es que, a la hora de hacer "magias" (proxies y cosas así), el tener que marcar como virtual es incoherente... porque aunque tu código no sea consciente, estás heredando de tus clases... y te toca marcarlo como virtual: Tu intención no es que cualquiera pueda sobreescribir tus métodos, sino que a lo mejor (probablemente) tu intención es que sólo el proxy del ORM (un elemento que yo consideraría infraestructura y no parte del API de tu aplicación) pueda sobre-escribir tus métodos. Francisco A. Lozano On Wed, Jan 14, 2009 at 07:40, Gustavo Ringel <[email protected]> wrote: > > Dario, no veo ninguna razon valida en el mail que mandaste, vos si? > Es la escuela de siempre de Microsoft: Te damos esto para que no cometas > errores porque la mayoria de nuestros usuarios son estupidos. O sea que la > gente que si sabe cuando quiere virtual y cuando no tiene que sufrir. > Porque no hacen todas las clases sealed tambien de entrada con ese criterio? > > Gustavo. > > On Tue, Jan 13, 2009 at 11:47 PM, Dario Quintana > <[email protected]> wrote: >> >> Hola gente >> >> En realidad, por "algunas razones" no es virtual, me lo desayuné hace algún >> tiempo en este link que me pasaron (en las listas del MUG): >> http://www.artima.com/intv/nonvirtual.html >> >> Saludos >> >> On Tue, Jan 13, 2009 at 6:45 PM, Gustavo Ringel <[email protected]> >> wrote: >>> >>> La respuesta te la diste vos mismo el castle dynamic proxy usa virtual para >>> lazy loading. >>> Ahora te pregunto, la pregunta era solo informativa o hay algo que te >>> molesta? Simplemente si queres usar el dynamic proxy de Castle para lazy >>> loading tenes que usar virtual. >>> Virtual es una palabrita magica y agradable que te permite aplicar proxy, >>> decorator, extender clases, testear...sin tener que cambiar codigo...en el >>> mundo de .NET por alguna razon no es el default, en Java todo es virtual si >>> no se dice lo contrario... >>> >>> Gustavo. >> >> -- >> Dario Quintana >> http://darioquintana.com.ar >> >> > > > > --~--~---------~--~----~------------~-------~--~----~ Para escribir al Grupo, hágalo a esta dirección: [email protected] Para más, visite: http://groups.google.com/group/NHibernate-Hispano -~----------~----~----~----~------~----~------~--~---
