stringvs. 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не є помилковим, але він залишає відкритими двері для сюрпризів у майбутньому.
Примітка. Більшість публікацій блогу я копіюю / вставляю з причини архіву. Я ігнорую деякі частини, тому рекомендую пропустити та прочитати допис у блозі, якщо можете.
stringце лексична конструкція граматики C #, тоді якSystem.Stringце лише тип. Незалежно від явної різниці, що згадується в будь-якій специфікації, все ж є ця неявна різниця, яка могла б відповідати деякій двозначності. Мова сама повинна підтримуватиstringтаким чином, що реалізація не (цілком) настільки зобов'язана розглянути для певного класу в BCL.