string vs String

26/11/2007 - 19:56 por Fuy | Informe spam
Hola, me encuentro leyendo los estándares para programar en C#. Veo
que en ellos cuando declaran una cadena lo hacen de la siguiente
forma:

string raza = "Rat Terrier";

Hace tiempo programaba en Java, por lo que siempre me acostumbre a
hacer lo de la siguiente forma:

String raza = "Rat Terrier";

En C# veo que hay string y String, buscando información sobre ellos
encuentro lo siguiente:

string .- es una colección secuencial de caracteres Unicode que un
texto representa.

String(Objeto).- es una colección secuencial de objetos System.Char
que representan un string.

Como puedo ver es casi lo mismo, podría decir que son un alias.

Pero entonces si quisiera seguir algún estandar para escribir código
en C# cual uso?

ok

ATTE
Fuy

Preguntas similare

Leer las respuestas

#11 Alhambra Eidos Kiquenet
27/11/2007 - 13:54 | Informe spam
Hola,

int no es más que un alias de System.Int32. System.Int32 no es una clase,
sino una estructura (es un tipo por valor). Así que realmente debería ser
indiferente usar uno u otro.

System.Int32:

http://msdn2.microsoft.com/es-es/li...stem.int32(vs.80).aspx

int:

http://msdn2.microsoft.com/es-es/library/5kzh1b5w(VS.80).aspx

La cuestión es que si los tipos por valor (tipos predefinidos, estructuras)
que están en la pila se pueden comportar como tipos por referencia
(montículo, heap). Es eso del box/unbox, no?

Saludos.

"RFOG" wrote:

Más o menos.

A eso lo llamo yo la dualidad onda-corpúsculo escariotrópico gimnésica.
Igual que la indeterminación cuántica existe en física, también existe en
C#...

Bueno, sieno serios, el tema es sencillo:

-Cuando tu usas "int a=4;", o "a=z*b;", el sistema te presenta a dichos
tipos como si fueran tipos integrados y predefinidos.
-Cuando tu usas "string s=a.ToString();", el sistema te presenta dichos
tipos como si fueran objetos.

Realmente es una dualidad interesante (pero que personalmente no me gusta
nada, o se es un tipo predefinido o se es un objeto -sí, ya sé, un objeto
que es un objeto predefinido, como los "intrinsics" de los compiladores),
pero debajo no hay tal. Las variables a,b,z,s son una dirección de memoria,
y cuando se hace algo como a.ToString() se invoca un método sobre dicha
dirección de memoria (*), por lo tanto tanto da que se usen como tipos
predefinidos o como objetos. Simplemente es una abstracción del lenguaje.

(*) Ya sé que no es así, pero a título informativo vale. Si es un tipo valor
su contenido está en una dirección de la pila, si es un tipo referencia,
está partido en dos, un puntero en la pila y el contenido del tipo en el
montículo; cuando se llame a ToString() sobre un tipo valor se usa la
dirección de la pila como el equivalente al objeto apuntado por "this de
C++", cuando se llama con un tipo referencia el proceso es algo más largo ya
que hay que ir al objeto que está en el montículo (que entonces será el
objeto apuntado por el "this de C++"), pero a nivel de abstracción es lo
mismo. Porque a fin de cuentas es lo mismo que en C++ (ya que no creo que
haya otra forma de hacerlo), cuando se llama a un método de una clase, se
llama a un método estático global (es decir, sólo hay uno) que representa
dicho método y al que se le pasa un puntero "this" para identificar a qué
conjunto de datos (objeto) estamos aplicando la operación que haga el método
invocado.


"Alhambra Eidos Kiquenet"
wrote in message news:
> Hola,
>
> int es un tipo predefinido, Int32 es una clase ? si hereda de
> system.Object
> todo es un objeto, son clases, no ?
>
> Saludos.
>
> "" wrote:
>
>> Desde mi punto de vista da igual si utilizas String o string son la
>> misma cosa solo ke String es la clase y string es un alias, es una
>> palabra reservada del lenguaje C# para referirse más rápidamente a una
>> clase String al igual que pasa con las structuras están las structuras
>> Int32, Byte, etc pero c# proporciona palabras reservadas como int o
>> byte que son los alias de una estructura
>>

Microsoft Visual C++ MVP
==> Mi blog sobre programación: http://geeks.ms/blogs/rfog
Mi blog sobre literatura: http://rfog.blogsome.com
Libros, ciencia ficción y programación
> La verdadera sabiduría está en reconocer la propia ignorancia.


Respuesta Responder a este mensaje
#12 Octavio Hernandez
27/11/2007 - 14:05 | Informe spam
Hola, Alfredo!

Yo uso string para definir variables y String para invocar métodos
estáticos, pero no se muy bien por que O:-)



Por un problema de gustos, me imagino, con todo tu derecho :-)
Yo personalmente uso string siempre.

Slds - Octavio
Respuesta Responder a este mensaje
#13 RFOG
27/11/2007 - 14:56 | Informe spam
Sipi.

Primero se pasan de la pila al montículo, copiándolos. Se hace lo que tengan
que hacer y se vuelven a la pila (y todo eso es muy caro en tiempo de
ejecución), excepto en situaciones como las colecciones. Una colección de
ints tendrá cada entero en el montículo, pero almacenado como tipo
referencia, es decir, estará el entero completo, no una referencia a él y el
propio entero en otro lugar de la pila, aunque el objeto colección sí esté
así.

"Alhambra Eidos Kiquenet"
wrote in message news:
Hola,

int no es más que un alias de System.Int32. System.Int32 no es una clase,
sino una estructura (es un tipo por valor). Así que realmente debería ser
indiferente usar uno u otro.

System.Int32:

http://msdn2.microsoft.com/es-es/li...stem.int32(vs.80).aspx

int:

http://msdn2.microsoft.com/es-es/library/5kzh1b5w(VS.80).aspx

La cuestión es que si los tipos por valor (tipos predefinidos,
estructuras)
que están en la pila se pueden comportar como tipos por referencia
(montículo, heap). Es eso del box/unbox, no?

Saludos.

"RFOG" wrote:

Más o menos.

A eso lo llamo yo la dualidad onda-corpúsculo escariotrópico gimnésica.
Igual que la indeterminación cuántica existe en física, también existe en
C#...

Bueno, sieno serios, el tema es sencillo:

-Cuando tu usas "int a=4;", o "a=z*b;", el sistema te presenta a dichos
tipos como si fueran tipos integrados y predefinidos.
-Cuando tu usas "string s=a.ToString();", el sistema te presenta dichos
tipos como si fueran objetos.

Realmente es una dualidad interesante (pero que personalmente no me gusta
nada, o se es un tipo predefinido o se es un objeto -sí, ya sé, un objeto
que es un objeto predefinido, como los "intrinsics" de los compiladores),
pero debajo no hay tal. Las variables a,b,z,s son una dirección de
memoria,
y cuando se hace algo como a.ToString() se invoca un método sobre dicha
dirección de memoria (*), por lo tanto tanto da que se usen como tipos
predefinidos o como objetos. Simplemente es una abstracción del lenguaje.

(*) Ya sé que no es así, pero a título informativo vale. Si es un tipo
valor
su contenido está en una dirección de la pila, si es un tipo referencia,
está partido en dos, un puntero en la pila y el contenido del tipo en el
montículo; cuando se llame a ToString() sobre un tipo valor se usa la
dirección de la pila como el equivalente al objeto apuntado por "this de
C++", cuando se llama con un tipo referencia el proceso es algo más largo
ya
que hay que ir al objeto que está en el montículo (que entonces será el
objeto apuntado por el "this de C++"), pero a nivel de abstracción es lo
mismo. Porque a fin de cuentas es lo mismo que en C++ (ya que no creo que
haya otra forma de hacerlo), cuando se llama a un método de una clase, se
llama a un método estático global (es decir, sólo hay uno) que representa
dicho método y al que se le pasa un puntero "this" para identificar a qué
conjunto de datos (objeto) estamos aplicando la operación que haga el
método
invocado.


"Alhambra Eidos Kiquenet"

wrote in message
news:
> Hola,
>
> int es un tipo predefinido, Int32 es una clase ? si hereda de
> system.Object
> todo es un objeto, son clases, no ?
>
> Saludos.
>
> "" wrote:
>
>> Desde mi punto de vista da igual si utilizas String o string son la
>> misma cosa solo ke String es la clase y string es un alias, es una
>> palabra reservada del lenguaje C# para referirse más rápidamente a una
>> clase String al igual que pasa con las structuras están las structuras
>> Int32, Byte, etc pero c# proporciona palabras reservadas como int o
>> byte que son los alias de una estructura
>>

Microsoft Visual C++ MVP
==>> Mi blog sobre programación: http://geeks.ms/blogs/rfog
Mi blog sobre literatura: http://rfog.blogsome.com
Libros, ciencia ficción y programación
>> La verdadera sabiduría está en reconocer la propia ignorancia.







Microsoft Visual C++ MVP
==Mi blog sobre programación: http://geeks.ms/blogs/rfog
Mi blog sobre literatura: http://rfog.blogsome.com
Libros, ciencia ficción y programación
La verdadera sabiduría está en reconocer la propia ignorancia.
Respuesta Responder a este mensaje
#14 Alfredo Novoa
27/11/2007 - 16:18 | Informe spam
On Tue, 27 Nov 2007 13:15:58 +0100, "RFOG"
wrote:

Ya sabía yo que ibas a saltar...

Lo que no entiendo es por qué eres tan tiquismiquis con la nomenclatura...



Yo no soy tiquismiquis, tu has sido descuidado.

La programación ya es bastante complicada como para aun encima liarla
por ser descuidados con el lenguaje.

Luego pasa lo que pasa y sale gente diciendo que las interfaces no se
pueden heredar.

Si se entiende, basta.



Pues no se entendía.

En informática muchas veces basta una pequeñísima imprecisión para que
no se entienda o se entienda al revés.

Muchas veces el único grado de precisión aceptable es la precisión
total. Igual que cuando haces un programa y te olvidas de una coma y
ya no compila.

Aquí no somos sesudos varones que están disctutiendo
sobre conceptos y emblemas. Esto es un grupo en el que la gente pregunta sus
dudas y otros (gente como ellos) intentan responder lo mejor que saben.



Y donde puedes confundir a la gente si respondes mal, y donde te
pueden corregir si no sabes muy bien lo que dices.

-Cuando tu usas "int a=4;", o "a=z*b;", el sistema te presenta a dichos
tipos como si fueran tipos integrados y predefinidos.
-Cuando tu usas "string s=a.ToString();", el sistema te presenta dichos
tipos como si fueran objetos.



Será como si fuesen clases. ¿No?



Más bien como ejemplos (en el sentido del instance en inglés) de clases.



Es decir, valores.

Entonces estás diciendo que el sistema presenta los tipos como si
fuesen valores, lo que no tiene sentido.

Una
clase es el concepto y su representación, un objeto es un ejemplo vivo de
dicha clase (dicho, creo, por Meyer).



Esta definición no es para nada aceptable desde un punto de vista
técnico o científico.

Una clase es un tipo y objeto es la confusión de los conceptos de
valor y variable.

Antropomorfizar los conceptos informáticos es buscarte los problemas
por la mano. Y la OOP cae mucho en ese pecado. Dijkstra ha escrito
bastante sobre las consecuencias de esta malísima costumbre
anglosajona. (Y ya se que Meyer es gabacho:).

Si alguien no sabe lo que es antropomorfizar que lo mire en el
diccionario.

En ese caso los tipos valor predefinidos también serían objetos.



En tu concepto de objeto, sí. En el mío no, ya que un tipo predefinido mapea
sobre un elemento físico existente dentro de un microprocesador



No, un tipo predefinido es un tipo que viene integrado en la
plataforma.

"Pre" significa "antes" como seguro que sabes. Predefinido significa
"definido antes" y nada más ni nada menos.

Cualquier variable de cualquier tipo termina asociandose tarde o
temprano a algún elemento físico de la computadora.

Y por cierto: mapear es espanglish, se dice asociar.

: los
registros y los tipos de datos que soporta directamente y que mapean en
instrucciones directas en ensamblador. Un entero está íntimamente
relacionado con el tamaño de un registro de un microprocesador, y un valor
en coma flotante, también.



No necesariamente. Lo que dices es bastante habitual por las ventajas
que tiene en el rendimiento, pero por ejemplo ya había enteros de 64
bits cuando los procesadores eran de 32 bits y números de punto
flotante cuando los procesadores no tenían registros para eso. También
existen ahora los enteros largos que no corresponden a ningún
registro, y también podríamos crear un lenguaje con enteros de 128
bits o los bits que queramos.


Saludos
Alfredo
Respuesta Responder a este mensaje
#15 Fuy
29/11/2007 - 21:43 | Informe spam
Gracias por las respuestas de todos, me ha sido de mucha ayuda.

Pero entonces si uso un estándar de C# para escribir código, cual
pongo? string o String. Veo en varios código que usan las dos.

ok

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