Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   .NET (https://www.clubdelphi.com/foros/forumdisplay.php?f=17)
-   -   dudas sobre clases String e Integer (https://www.clubdelphi.com/foros/showthread.php?t=34119)

radaalvaro 27-07-2006 18:04:00

dudas sobre clases String e Integer
 
Saludos mis queridos amigos Delphi-Adictos. 1.Tengo una pequeña duda... Basada en .net Framework 1.1Busque información sobre como poder heredar de la clase String, pero me tope con el inconveniente de que no puede ser heredada, como tampoco se puede usar el class helper con la misma, entonces, la pregunta es...¿Sabe alguien algun truco o modo de Cómo podria aumentarle nuevos metodos a la clase string sin tener que crear una nueva clase y reescribir todo???.2. Trabajando con Delphi .net. puedo ver que cuando uno tiene un variable de tipo TObject (system.Object) tranquilamente uno puede asignarle cualquier clase a la misma sin necesidad de usar un Tipificador (Esto por cuestiones de herencia - Teoria de Objetos). Y pasa lo mismo con la clase Integer ya que si o si necesita Tipificador... alguien sabe por que???Por ejemvarob : system.Object;s: string;L : arrayList;i : integer;BeginOb := s; // Funciona.Ob := L; // Funciona.Ob := i; // NO FUNCIONA.Ob := TObject(i); // FUNCIONA

__hector 31-07-2006 17:56:54

1. Si la clase esta sellada (sealed o finally en java), no puedes heredarla, ya que justamente para eso existe ese atributo de clase, para evitar lo que quieres lograr.

2. Con respecto a lo segundo: puedes perfectamente asignar un entero a un objeto (al menos en c#). Que error te da el compilador?

Lepe 01-08-2006 16:06:17

Cita:

Empezado por hector
1. Si la clase esta sellada (sealed o finally en java), no puedes heredarla

Me he quedado intrigado, y la razón de un sellado, al parecer es esta:
Cita:

The sealed modifier is primarily used to prevent unintended derivation, but it also enables certain run-time optimizations. In particular, because a sealed class is known to never have any derived classes, it is possible to transform virtual function member invocations on sealed class instances to nonvirtual invocations.
De hecho lo asemejan con TCustomEdit de la VCL de delphi, que siempre puedes derivar de ese control, en lugar de TEdit.

Discusión original

Saludos

Al González 02-08-2006 01:27:48

¿Vamos pa'trás?
 
¡Hola a todos!

Interesantísimo enlace Lepe.

Mientras algunos soñamos con expandir la POO incluyéndole herencia insertada, otros comienzan a sellar clases :confused:.

¿Qué vendrá después? ¿Clases no selladas a cambio de un pago? :(

Caramba, ¿qué onda con ese atributo? :eek:

Un abrazo heredable.

Al González. :)

radaalvaro 08-08-2006 07:18:30

Duda 2
 
Cita:

Empezado por hector
2. Con respecto a lo segundo: puedes perfectamente asignar un entero a un objeto (al menos en c#). Que error te da el compilador?

el error que da Delphi.NET (no Vcl.net) al asignar una variable integer (no system.int32) a una variable tipo TObject ( o system.Object); el error que sale es que dicen que son tipos incompatibles, es necesario usar un comodin. Obj := i; // falla Obj := TObject(i); //FUNCIONA, y la pregunta es POR QUE de esa manera... no que todas las clases heredan de TObject???Saludos.

__hector 16-08-2006 20:23:00

Creo haberlo probado bien en c# y no me dio ningun error. Supongo que el compilador se queja porque el tipo integer (como decimal, bool y los otros tipos de datos primitivos, excepto string) es un tipo de dato de valor (valuetype) mientras que la clase Object define un dato por referencia (referencetypes vs valuetypes), y al parecer el compilador no hace el boxing automaticamente.

De todas formas existe un mecanismo para lograr lo que quieres, y es haciendo la conversion manualmente. Igualmente, es bueno identificar que existen tipos de datos diferentes (por valor y referencia), y que el compilador (el que sea) puede decidir cuando hacer el boxing/unboxing automatico o exigir al programador que lo escriba.

kylix_74 24-08-2006 18:24:51

Autoboxing
 
Hola radaalvaro!

En cuanto al punto dos si existe una forma de decirle al compilador de hacer el boxing automatico.

En tu codigo pon la siguiente directiva de compilacion:

{$AUTOBOX ON}

Asi podras asignar un entero a un objeto sin tener que hacer la conversion manualmente.

De hecho si te fijas en el codigo generado del BDS, normalmente de forma automatica agrega esa directiva a el codigo, debajo de implementation...

Saludos!


La franja horaria es GMT +2. Ahora son las 14:54:41.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi