string
против String
- это не дебаты о стиле
[...]
Ключевое слово string
имеет конкретное значение в C #. Это тип System.String
, который существует в базовой сборке времени выполнения. Среда выполнения по сути понимает этот тип и предоставляет возможности, ожидаемые разработчиками для строк в .NET. Его присутствие настолько критично для C #, что, если этот тип не существует, компилятор завершит работу, прежде чем попытаться даже проанализировать строку кода. Следовательно, string
имеет точное, однозначное значение в коде C #.
Идентификатор String
хотя и не имеет конкретного значения в C #. Это идентификатор, который проходит через все правила поиска имен как Widget
, Student
и т. Д. Он может связываться со строкой или связываться с типом в другой сборке, цели которого могут полностью отличаться от string
. Хуже того, это может быть определено таким образом, что код, подобный String s = "hello"
; продолжил компиляцию.
class TricksterString {
void Example() {
String s = "Hello World"; // Okay but probably not what you expect.
}
}
class String {
public static implicit operator String(string s) => null;
}
Фактическое значение String
всегда будет зависеть от разрешения имени.
Это означает, что это зависит от всех исходных файлов в проекте и всех
типы, определенные во всех ссылочных сборках. Короче это
требуется совсем немного контекста, чтобы знал что это значит.
Правда, в подавляющем большинстве случаев String
и string
будут связываться с
того же типа. Но использование String
все еще означает, что разработчики уходят
их программа до устного перевода в местах, где есть только один
правильный ответ. Когда String
связывается с неправильным типом, он может оставить
разработчики часами отлаживают, регистрируют ошибки в команде компиляторов и
обычно трата времени, которое можно было бы сэкономить с помощью string
.
Другой способ визуализировать разницу заключается в следующем примере:
string s1 = 42; // Errors 100% of the time String s2 = 42; // Might
error, might not, depends on the code
Многие будут утверждать, что, хотя технически точная информация является использованием, String
все еще в порядке, потому что крайне редко кодовая база определяет тип этого имени. Или то, что String
определено, это признак плохой базы кода.
[...]
Вы увидите, что String
определен для ряда полностью допустимых целей: помощников по отражению, библиотек сериализации, лексеров, протоколов и т. Д. Для любой из этих библиотек String
против string
имеет реальные последствия в зависимости от о том, где используется код.
Помните, когда вы видите дебаты String
против string
, речь идет о семантике, а не о стиле. Выбор строки дает четкий смысл вашей кодовой базе. Выбор String
не является неправильным, но он оставляет дверь открытой для сюрпризов в будущем.
Примечание. Я скопировал / вставил большую часть сообщения блога по причине архива. Я игнорирую некоторые части, поэтому рекомендую пропустить и прочитать сообщение в блоге , если можете.