1

Вот в процессе разработки "недетского" приложения на C# возник совсем "детский" вопрос: "Есть ли разница между двумя данными типами?":

String str1;
string str2;
Deleted
  • 371
Free_man
  • 970
  • Мне вот тоже интересно, как начинающему программисту на C#. Могу лишь предположить, что разницы нет никакой. – KoCaTKo Jun 29 '12 at 17:46

2 Answers2

4

Нет, string - это аллиас класса String, так же как int - аллиас Int32, long - Int64 и прочее.

Вот таблица из книги Рихтера "CLR via С#"

types

Что он говорит по этому поводу:

Я не могу согласиться со следующим утверждением из спецификации языка С#: «С точки зрения стиля программирования предпочтительней использовать
ключевое слово, а не полное системное имя типа». Я стараюсь использовать имена типов FCL и избегать имен элементарных типов. На самом деле мне бы хотелось, чтобы имен элементарных типов не было совсем, а разработчики употребляли только имена FCL-типов.

И приводит аргументы почему, почитайте, хорошая книга.

Deleted
  • 371
Spectre
  • 12,309
  • Спасибо. Я, скажем так, об этом догадывался, но, например, если рассмотреть целочисленные типы, как алиасы, то в этом есть смысл. Так, long, в отличии от int/int32 может вместить большее значение. С int32 По отношению к int64 тоже все более-менее понятно.

    А вот как же понимать одноименный "алиасный" тип string по отношению к String ?

    – Free_man Jun 29 '12 at 18:11
2

Просто string - это алиас класса String(), т.е. в коде пишем string тоже что new System.String

короче говоря

string x = new System.String(' ', 5);

Вот список пвсевдонимов CLR Типов:

Пвсевдоним CLR тип

string  System.String
sbyte   System.SByte
byte    System.Byte
short   System.Int16
ushort  System.UInt16
int     System.Int32
uint    System.UInt32
long    System.Int64
ulong   System.UInt64
char    System.Char
float   System.Single
double  System.Double
bool    System.Boolean
Deleted
  • 371
johniek_comp
  • 2,509
  • 4
  • 26
  • 45