string
не является примитивным типом в C #. Это один из двух предопределенных (то есть, часть спецификации языка) ссылочных типов в C # (другой - object
). Типы примитивов в C #: Boolean
(bool
), Byte
(byte
), SByte
(sbyte
), Int16
(short
), UInt16
, Int32
( int
), UInt32 (uint
), Int64
(long
), UInt64 (ulong
), IntPtr
, UIntPtr
, Char
(char
), Double
(double
) и Single
(single
).
Обратите внимание, что в спецификации говорится: «также можно использовать структуры и операторы.
перегрузка для реализации новых «примитивных» типов в языке C #, но typeof(MyStruct).IsPrimitive
равно false
, если MyStruct
определено пользователем struct
.
Я взял книгу и начал читать и практиковаться с кодом. Я был удивлен, когда увидел, что строка в C # считается примитивным типом.
Книга сказала это? Какая книга?
Я - разработчик Java, и я понимаю, что примитивные типы данных не имеют операций, есть только классы.
Проще говоря, C # и Java - это разные языки. В C # существует понятие object
, из которого происходит почти все (да, есть исключения, наиболее важным из которых является интерфейс). От object
есть производный тип, называемый ValueType
. Производные ValueType
- это struct
s, которые имеют семантику значений. Все остальные производные object
являются ссылочными типами. Все эти object
инкапсулируют данные и поведение (то есть они могут иметь методы).
string name = "alex";
Console.WriteLine(name.ToUpper());
Как это возможно?
Я не понимаю вашу путаницу с этим фрагментом кода. name
является экземпляром string
, который определенно назначается строковым литералом "alex"
, и мы вызываем одну из перегрузок метода String.ToUpper
в name
. Затем вызывается перегрузка Console.WriteLine
, которая принимает экземпляр string
. Вы даже можете сделать это
Console.WriteLine("alex".ToUpper());
Они действительно примитивы?
Нет. string
не примитив.
Что мне здесь не хватает?
То, что C # и Java являются родственными, но очень разными языками программирования.