Ну int и float еще могу понять отчасти, но смысл разделять char и string? Почему символ не может быть "единичной" строкой?
Когда получаю ошибку с типом на шарпе каждый раз со скупой слезой вспоминаю питон((
C#
Зачем нужно разделение на типы char и string в c# ?
Потому, что С# "вырос" из "C" , в котором строк вообще не было - были массивы символов с терминатором
Символ не может быть единичной строкой. Ибо строка состоит минимум из двух байт - самого символа и символа завершения строки.
Ага... А как работать с каким-нибудь WinAPI, где полно всяких char*?
Чтобы из букв составлять слова, из цифр числа, использовать знаки препинания, а также арифметические знаки и многие другие. Признайтесь, вы это раньше этого не знали?
char - это еще и число, можно перебирать все символы, например, от A до Z циклом со счетчиком char.
Кроме того, в случаях, когда нужен точный размер данных, какой-то структуры, хранимой в БД, то видя char, понимаешь, что сюда только 1 символ влезет, и можно посчитать, сколько байт займет такая запись в таблице. А со string, хз, если сама БД не поддерживает фиксированных строк или если данная строка не фиксированная, то только замерять, а посчитать (сколько весит одна запись * кол-во записей) не получится. Поэтому string в БД не используют без надобности :)
А питон, ну он сильно отличается от Си-подобных языков. Но почему-то именно Си-подобные языки получили такое развитие, а питон так и остался распиаренной хренью, которую в 50-80% случаев пихают в проект просто потому, что им скучно и есть какое-то влечение к змеям.
Видимо, изврат здесь именно питон, а не наоборот.
Кроме того, в случаях, когда нужен точный размер данных, какой-то структуры, хранимой в БД, то видя char, понимаешь, что сюда только 1 символ влезет, и можно посчитать, сколько байт займет такая запись в таблице. А со string, хз, если сама БД не поддерживает фиксированных строк или если данная строка не фиксированная, то только замерять, а посчитать (сколько весит одна запись * кол-во записей) не получится. Поэтому string в БД не используют без надобности :)
А питон, ну он сильно отличается от Си-подобных языков. Но почему-то именно Си-подобные языки получили такое развитие, а питон так и остался распиаренной хренью, которую в 50-80% случаев пихают в проект просто потому, что им скучно и есть какое-то влечение к змеям.
Видимо, изврат здесь именно питон, а не наоборот.
char – это value type
https://docs.microsoft.com/ru-ru/dotnet/csharp/language-reference/builtin-types/value-types
string – это refrence type
https://docs.microsoft.com/ru-ru/dotnet/csharp/language-reference/keywords/reference-types
Это очень важное различие, особенно для оптимизации.
В программировании очень важно различие между единичным значением и коллекцией значений. Например, число и массив чисел. Понятно, что это разные типы. То же самое: символ и массив символов. Массив символов – это и есть строка по сути. Только массив изменяемый, а строка в C# неизменяемая. И у строки есть специфические методы.
https://docs.microsoft.com/ru-ru/dotnet/csharp/language-reference/builtin-types/value-types
string – это refrence type
https://docs.microsoft.com/ru-ru/dotnet/csharp/language-reference/keywords/reference-types
Это очень важное различие, особенно для оптимизации.
В программировании очень важно различие между единичным значением и коллекцией значений. Например, число и массив чисел. Понятно, что это разные типы. То же самое: символ и массив символов. Массив символов – это и есть строка по сути. Только массив изменяемый, а строка в C# неизменяемая. И у строки есть специфические методы.
ТипРазмер (бит) Диапазон значений
byte 80...255
sbyte 8-128...127
short 16-32,768...32,767
ushort 160...65,535
int 32-2,147,483,648...2,147,483,647
uint 320...4,294,967,295
long 64-9,233,372,036,854,775,808...9,233,372,036,854,775,807
ulong 640...18,446,744,073,709,551,615
float 32-3,402823e38...3,402823e38
double 64-1,79769313486232e308...1,79769313486232e308
decimal 128-79,228,162,514,264,337,593,543,950,335...79,228,162,514,264,337,593,543,950,335
char 16Символ Юникода
string -Строка символов Юникода
bool 1true или false
object -Объект
byte 80...255
sbyte 8-128...127
short 16-32,768...32,767
ushort 160...65,535
int 32-2,147,483,648...2,147,483,647
uint 320...4,294,967,295
long 64-9,233,372,036,854,775,808...9,233,372,036,854,775,807
ulong 640...18,446,744,073,709,551,615
float 32-3,402823e38...3,402823e38
double 64-1,79769313486232e308...1,79769313486232e308
decimal 128-79,228,162,514,264,337,593,543,950,335...79,228,162,514,264,337,593,543,950,335
char 16Символ Юникода
string -Строка символов Юникода
bool 1true или false
object -Объект
Похожие вопросы
- Зачем нужно разделение на стек и кучу?
- System.InvalidCastException: "Unable to cast object of type 'System.String[]' to type 'System.IConvertible'."
- Зачем в C# нужны типы данных?
- Стоит ли дальше учить C#?
- Нужно, чтобы когда закрывалось консольное приложение на C# происходило какое-то действие!
- Программирование на C Sharp (C#)
- Сегодня начал учить c#, решил сделать калькулятор простой и столкнулся с такой ошибкой при компиляции, хелпуйте.
- Что лучше C# или C++?
- Зачем разбивать код в C# на отдельные классы?
- Помогите пожалуйста. Написать на C#
В JS тоже нет отдельного типа данных для char. И классическом Паскале вроде не было (тут могу ошибаться).