Оглядываясь Назад на C#. Продолжение
С новым годом! Продолжаем вчерашнюю историю…
Наряду с этим у языка C# были «особенности», которые и в то время считались пугающими, а сегодня вообще бы сделали язык непригодным для использования:
1. В C# были только массивы (никаких других коллекций), и во многих случаях их нельзя было расширять. В то время в .NET Framework были вспомогательные функции для этого, но это было совсем не так просто, как, например, вызов
List<T>.Add(). Встроенные функции копировали данные в новый массив, поэтому, если вы рассчитывали, что ссылки на исходный массив все ещё работают, вам не повезло. Вы также должны были осознавать компромиссы между временем и количеством памяти и выбирать оптимальный подход. В .NET был список ArrayList, который изначально поддерживал расширение, но только в том случае, если вы соглашались с тем, что все его элементы были типа Object.2. Боксинг, который существует до сих пор, хотя представляет гораздо меньшую проблему, чем в 2001 году.
3. Обнуляемые значимые типы (например, целые числа) не существовали. Это ставило разработчиков перед трудной проблемой определения того, как обрабатывать значения по умолчанию. Вы предполагали, что 0 - значение по умолчанию для целых чисел. Это работало, только если 0 не находился в диапазоне допустимых значений. Тогда приходилось выбирать другое значение, например -1. И это работало, пока кто-то не забывал установить это значение по умолчанию, и вы не тратили часы на поиск того, откуда появляется 0.
4. Хотя технически это не совсем проблема C#, концепция файла
.ini была заменена конфигурацией в виде XML, который разработчики до этого никогда не видели и не понимали, как использовать. Хотя сейчас это звучит довольно глупо, простая конфигурация в виде «ключ=значение» была заменена гораздо более многословным синтаксисом.С другой стороны, в Microsoft предприняли несколько смелых шагов, невиданных в языках в то время, чтобы помочь программистам в их повседневной работе. Хотя C#, возможно, и не изобрёл с нуля эти концепции, он пропагандировал их, просто мягко побуждая разработчиков работать более продуктивно и устраняя распространённые ошибки, что и сделало его популярным.
Один из примеров – запрет «проваливаться» в следующий
case:switch numberХотя некоторым это ограничение кажется смешным, оно экономит бесчисленные часы отладки, когда
{
case 0:
DoSomething();
// Нельзя опускать оператор break
case 1:
DoSomethingElse();
break;
...
}
break был случайно пропущен.Точно так же C# убрал необходимость в «синтаксисе Йоды»
if (42 == answer), когда константа ставится в левую часть оператора сравнения, просто чтобы не путать сравнение с присваиванием if (answer = 42). Также запрещены выражения вроде
if(42), а требуется явное if(42 > 0), потому что первое сбивает с толку людей, не понимающих, почему, например, в JavaScript if(-1) оценивается как true.Окончание следует…
Источник: https://kemiller2002.github.io/c-sharp/2021/12/24/reflection.html