string
no es un tipo primitivo en C#. Es uno de los dos tipos de referencia predefinidos (es decir, parte de la especificación del lenguaje) en C# (el otro es object
).Los tipos de primitivas en C# son Boolean
(bool
), Byte
(byte
), SByte
(sbyte
), Int16
(short
), UInt16
, Int32
(int
), UInt32 (uint
), Int64
(long
), UInt64 (ulong
), IntPtr
, UIntPtr
, Char
(char
), Double
(double
) y Single
(single
). Tenga en cuenta que la especificación establece que "también es posible utilizar estructuras y operador sobrecarga para implementar nuevos tipos‘’en el lenguaje C#" primitivos pero eso es typeof(MyStruct).IsPrimitive
false
si MyStruct
es una struct
definida por el usuario.
Recibí un libro y comencé a leer y practicar con el código. Me sorprendió cuando vi que la cuerda en C# se considera un tipo primitivo.
El libro dice esto? ¿Cuál libro?
Soy desarrollador de Java y entendí que los tipos de datos primitivos no tienen operaciones, solo las clases tienen.
Simple y llanamente, C# y Java son idiomas diferentes. En C# existe la noción de object
de la que deriva casi todo (sí, hay excepciones, la más importante de las cuales son las interfaces). Desde object
hay un tipo derivado llamado ValueType
. Los derivados de ValueType
son struct
s que tienen semántica de valor. Todos los demás derivados de object
son tipos de referencia. Todos estos object
s encapsulan datos y comportamiento (es decir, pueden tener métodos).
string name = "alex";
Console.WriteLine(name.ToUpper());
¿Cómo es esto posible?
No entiendo su confusión con este fragmento de código. name
es una instancia de string
que está definitivamente asignada por la cadena literal "alex"
y estamos invocando una de las sobrecargas del método String.ToUpper
en name
. A continuación, se invoca la sobrecarga de Console.WriteLine
que acepta una instancia de string
. Incluso puede hacer esto
Console.WriteLine("alex".ToUpper());
¿Son realmente primitivas?
No. string
no es un primitivo.
¿Qué es lo que falta aquí?
That C# y Java son lenguajes de programación relacionados pero muy diferentes.
Mal ejemplo, dado que en Java String es un objeto, por lo que "abc" .toString() funciona en Java como lo hace "abc" .ToString() en C# Una distinción es que 123.toString() no funcionará en Java , mientras que 123.ToString() funcionará en C# Entonces podrías preguntar por qué int (que es una primitiva en C# Console.WriteLine (typeof (int) .IsPrimitive) // verdadero tiene métodos. – barlop