В чем разница между строкой и строкой в ​​С#?

Для полноты, вот свалка соответствующей string информации ...

Как уже отмечали .net другие, string - это псевдоним datatypes для System.String. Предполагая, что ваш .net-framework код с использованием String компилируется string в System.String (т.е. у вас нет директивы datatype using для некоторого другого types пространства имен с другим c# типом String), они компилируются types в один и тот же код, поэтому dotnet во время выполнения нет разницы c-sharp как бы то ни было. Это всего c# лишь один из псевдонимов type в C#. Полный список:

object:  System.Object
string:  System.String
bool:    System.Boolean
byte:    System.Byte
sbyte:   System.SByte
short:   System.Int16
ushort:  System.UInt16
int:     System.Int32
uint:    System.UInt32
long:    System.Int64
ulong:   System.UInt64
float:   System.Single
double:  System.Double
decimal: System.Decimal
char:    System.Char

За исключением str string и object, все псевдонимы относятся csharp к типам значений. decimal - это string-manipulation тип значения, но не примитивный csharp тип в среде CLR. Единственный datatype примитивный тип, у которого type нет псевдонима, - это System.IntPtr.

В strings спецификации псевдонимы типов dot-net значений известны как "простые str типы". Литералы могут использоваться c#.net для постоянных значений любого datatypes простого типа; у других типов c-sharp значений нет доступных буквальных alias форм. (Сравните это с VB, который .net-framework позволяет использовать литералы dotnet DateTime и также имеет для него псевдоним.)

Существует aliases одно обстоятельство, при datatypes котором вы должны использовать str псевдонимы: при явном указании string базового типа перечисления. Например:

public enum Foo : UInt32 {} // Invalid
public enum Bar : uint   {} // Valid

Это datatype просто вопрос того, как спецификация csharp определяет объявления перечисления dot-net - часть после двоеточия должна .net-framework быть продукцией интегрального типа, которая string является одним токеном sbyte, byte, short, ushort, int, uint, long, ulong, char ... в datatype отличие от type, используемого c# для создания объявлений переменных str . Других отличий это не указывает.

Наконец, когда string-manipulation дело доходит до того, что string-manipulation использовать: лично я использую csharp псевдонимы везде для реализации, но dot-net тип CLR для любых API. На aliases самом деле не имеет большого datatypes значения, что вы используете strings с точки зрения реализации str - последовательность в вашей .net-framework команде - это хорошо, но c# никого больше не волнует. С string-manipulation другой стороны, действительно type важно, чтобы, если вы ссылаетесь datatype на тип в API, вы делали это alias независящим от языка способом. Метод visual-c# с именем ReadInt32 однозначен, тогда aliases как метод с именем ReadInt требует types интерпретации. Например, вызывающий strings может использовать язык, который csharp определяет псевдоним int для visual-c# Int16. Разработчики .NET Framework aliases следовали этому шаблону, хорошие string примеры - в классах BitConverter, BinaryReader и dotnet Convert.

c#

.net

string

types

alias

2022-11-19T17:42:08+00:00