duda sobre tipos por valor y referencia

17/07/2005 - 15:33 por luis | Informe spam
Según he leido en C# todo son objetos incluso los tipos básicos como int,
long, ... y que todos derivan de la clase base Object. Esto es al contrario
de Java donde los tipos básicos no son objetos.
Esto provoca una mayor sobrecarga pero en C# se han creado como de tipo "por
valor" con lo que almacenan directamente su contenido y no una referencia a
los datos.

Pero luego leo en la documentanción del msdn esto:

"Boxing y unboxing permiten tratar a los tipos de valor como objetos. Los
tipos de valor, incluidos los de estructura y los integrados, como int, se
pueden convertir al tipo object y desde el tipo object".



¿Pero no me están diciendo que estos tipos básico si son objetos? ¿O es que
no son objetos al igual que en Java?

Preguntas similare

Leer las respuestas

#1 Alfredo Novoa
17/07/2005 - 17:20 | Informe spam
On Sun, 17 Jul 2005 15:33:09 +0200, "luis"
wrote:

Según he leido en C# todo son objetos incluso los tipos básicos como int,
long, ... y que todos derivan de la clase base Object. Esto es al contrario
de Java donde los tipos básicos no son objetos.
Esto provoca una mayor sobrecarga pero en C# se han creado como de tipo "por
valor" con lo que almacenan directamente su contenido y no una referencia a
los datos.

Pero luego leo en la documentanción del msdn esto:

"Boxing y unboxing permiten tratar a los tipos de valor como objetos. Los
tipos de valor, incluidos los de estructura y los integrados, como int, se
pueden convertir al tipo object y desde el tipo object".

¿Pero no me están diciendo que estos tipos básico si son objetos? ¿O es que
no son objetos al igual que en Java?



Efectivamente, la documentación es incoherente (nada raro, por
cierto).

Tendría que decir esto:

Boxing y unboxing permiten tratar a los objetos de tipos de valor como
objetos de tipos de referencia. Los objetos de tipos de valor,
incluidos los de estructura y los integrados, como int, se pueden
convertir al tipo object y desde el tipo object.


Saludos
Respuesta Responder a este mensaje
#2 luis
17/07/2005 - 17:40 | Informe spam
Gracias pero otra duda. Si estas variables guardan directamente su valor, si
cuando asignamos su valor a otra variable lo que hacemos es asignarle su
valor y no se dirección de memoria, si no admiten null, ... ¿en qué se
diferencian de otras variables "normales" de otros lenguajes?

"Alfredo Novoa" escribió en el mensaje
news:
On Sun, 17 Jul 2005 15:33:09 +0200, "luis"
wrote:

>Según he leido en C# todo son objetos incluso los tipos básicos como int,
>long, ... y que todos derivan de la clase base Object. Esto es al


contrario
>de Java donde los tipos básicos no son objetos.
>Esto provoca una mayor sobrecarga pero en C# se han creado como de tipo


"por
>valor" con lo que almacenan directamente su contenido y no una referencia


a
>los datos.
>
>Pero luego leo en la documentanción del msdn esto:
>
>"Boxing y unboxing permiten tratar a los tipos de valor como objetos. Los
>tipos de valor, incluidos los de estructura y los integrados, como int,


se
>pueden convertir al tipo object y desde el tipo object".
>
>¿Pero no me están diciendo que estos tipos básico si son objetos? ¿O es


que
>no son objetos al igual que en Java?

Efectivamente, la documentación es incoherente (nada raro, por
cierto).

Tendría que decir esto:

Boxing y unboxing permiten tratar a los objetos de tipos de valor como
objetos de tipos de referencia. Los objetos de tipos de valor,
incluidos los de estructura y los integrados, como int, se pueden
convertir al tipo object y desde el tipo object.


Saludos
Respuesta Responder a este mensaje
#3 Alfredo Novoa
17/07/2005 - 17:59 | Informe spam
On Sun, 17 Jul 2005 17:40:33 +0200, "luis"
wrote:

Gracias pero otra duda. Si estas variables guardan directamente su valor, si
cuando asignamos su valor a otra variable lo que hacemos es asignarle su
valor y no se dirección de memoria, si no admiten null, ... ¿en qué se
diferencian de otras variables "normales" de otros lenguajes?



En que cuando asignamos su valor a otra variable de tipo referencia se
crea automáticamente un valor de tipo referencia y entonces si se
asigna un puntero.

Ejemplo:

int i = 1;

Se asigna un valor

object o = i;

Se crea una nueva variable de tipo referencia y se asigna un puntero.

Esto es equivalente a:

int i = 1;
object o = new Integer(i);


Saludos
Respuesta Responder a este mensaje
#4 luis
17/07/2005 - 18:33 | Informe spam
Siento ser tan pesado pero el boxing automático también podría hacerse a una
variable de "las de toda la vida" ¿no?. Creo que es lo que hace la nueva
versión de Java.

Además he seguido buscando y en un libro he encontrado, allá por la página
400, que hasta ahora me decían que todo en C# era un objeto pero que en
realidad lo que pasa es que todo puede ser TRATADO como objeto. Por ello
podemos usar métodos en literales (como "hola".ToUpper()) ya que supongo C#
les hará el boxing y se creará un objeto.

Es que que las variables "por valor" guarden directamente su contenido, que
no admitan nulos, que al asignarlas a otra variable se pase el valor de la
misma y no su referencia no es más que la definición de variable de toda la
vida.

Tal vez es que soy un tozudo y basta con que admita esta explicación y ya
está: son objetos y punto. Entiendo perfectamente sus diferencias en cuanto
a comportamiento y detalles a tener en cuenta al programar pero ...




"Alfredo Novoa" escribió en el mensaje
news:
On Sun, 17 Jul 2005 17:40:33 +0200, "luis"
wrote:

>Gracias pero otra duda. Si estas variables guardan directamente su valor,


si
>cuando asignamos su valor a otra variable lo que hacemos es asignarle su
>valor y no se dirección de memoria, si no admiten null, ... ¿en qué se
>diferencian de otras variables "normales" de otros lenguajes?

En que cuando asignamos su valor a otra variable de tipo referencia se
crea automáticamente un valor de tipo referencia y entonces si se
asigna un puntero.

Ejemplo:

int i = 1;

Se asigna un valor

object o = i;

Se crea una nueva variable de tipo referencia y se asigna un puntero.

Esto es equivalente a:

int i = 1;
object o = new Integer(i);


Saludos
Respuesta Responder a este mensaje
#5 luis
17/07/2005 - 20:33 | Informe spam
Una reformulación de la pregunta:

Si en C# los tipos básicos son objetos ¿qué ventaja supone sobre Java?. En
Java estos tipos no son objetos habiendo el problema de necesitar realizar
conversiones implícitas cuando era necesario. Pero en Java 1.5 se ha
incluido la capacidad de boxing automático y estos tipos de datos básicos
siguen sin ser objetos.



"luis" escribió en el mensaje
news:%
Siento ser tan pesado pero el boxing automático también podría hacerse a


una
variable de "las de toda la vida" ¿no?. Creo que es lo que hace la nueva
versión de Java.

Además he seguido buscando y en un libro he encontrado, allá por la página
400, que hasta ahora me decían que todo en C# era un objeto pero que en
realidad lo que pasa es que todo puede ser TRATADO como objeto. Por ello
podemos usar métodos en literales (como "hola".ToUpper()) ya que supongo


C#
les hará el boxing y se creará un objeto.

Es que que las variables "por valor" guarden directamente su contenido,


que
no admitan nulos, que al asignarlas a otra variable se pase el valor de la
misma y no su referencia no es más que la definición de variable de toda


la
vida.

Tal vez es que soy un tozudo y basta con que admita esta explicación y ya
está: son objetos y punto. Entiendo perfectamente sus diferencias en


cuanto
a comportamiento y detalles a tener en cuenta al programar pero ...




"Alfredo Novoa" escribió en el mensaje
news:
> On Sun, 17 Jul 2005 17:40:33 +0200, "luis"
> wrote:
>
> >Gracias pero otra duda. Si estas variables guardan directamente su


valor,
si
> >cuando asignamos su valor a otra variable lo que hacemos es asignarle


su
> >valor y no se dirección de memoria, si no admiten null, ... ¿en qué se
> >diferencian de otras variables "normales" de otros lenguajes?
>
> En que cuando asignamos su valor a otra variable de tipo referencia se
> crea automáticamente un valor de tipo referencia y entonces si se
> asigna un puntero.
>
> Ejemplo:
>
> int i = 1;
>
> Se asigna un valor
>
> object o = i;
>
> Se crea una nueva variable de tipo referencia y se asigna un puntero.
>
> Esto es equivalente a:
>
> int i = 1;
> object o = new Integer(i);
>
>
> Saludos


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida