.NET глазами дельфийца. C# - Чего нет в Delphi
ОГЛАВЛЕНИЕ
Чего нет в Delphi
Теперь можно рассмотреть те преимущества, которые имеетC# по сравнению сDelphi (порядокперечисления произволен и ни в коей мере не отражает объективные приоритеты илисубъективные предпочтения):
- описание переменных в коде программы
- возможность передачи в метод переменного количества параметров
- автоматическое удаление объектов
- поля классов
- индексаторы
- делегаты
- возможность реализации модели обработки событий
- цикл foreach
- статические конструкторы
- операторы классов
- структуры
- атрибуты
- возможность использовать русский язык для имен объектов программы
Описание переменных в коде программы
Возможность описания переменных в коде программы пришла вC# из C++. Пример кода:
class VarTest {
static void Main() {
int a;
int b, c = 1, d;
for (int i = 0; i < 10; i++) {
int x = i * 2;
}
}
}
В этом примере продемонстрированы сразу нескольковозможностей, отсутствующих в Delphi:
- описание переменных
- одновременное описание и инициализация переменных
- локальная область видимости и время жизни переменных
Возможность передачи в метод переменного количества параметров
Пример кода, иллюстрирующий возможность передачи в методпеременного количества параметров:
class Test {
static void F(params int[] args) {
// обработка параметров
}
static void Main() {
F();
F(1);
F(1, 2);
F(1, 2, 3);
F(new int[] {1, 2, 3, 4});
}
}
В Delphi отсутствие переменного количества параметров можно частичноскомпенсировать либо использованием значений параметров по умолчанию, либопередачей в качестве параметра открытого массива.
Однако в первом случае все равно количество параметровограничено и должно быть определено при написании соответствующейподпрограммы.
Во втором же случае, хотя и наблюдается сходство с C#, есть существенныеограничения:
- нельзя передать пустой массив (т.е. массив с нулевым количеством элементов)
- передаваемый массив должен быть создан и заполнен или до вызова подпрограммы, или в момент вызова с помощью конструктора открытого массива
- неоднородные типы данных поддерживаются только при передаче вариантного открытого массива (впрочем, код разбора такого массива внутри подпрограммы обычно бывает довольно
- громоздким).