Я вижу данную расылку, как аналог премодерируемой конференции.
Т.е. здесь мы, люди изучающие и использующие платформу .NET,
сможем обменяться своими находками и идеями.
Любые ваши письма на адрес level3@mail.ru
с вопросами и ответами будут помещены в рассылку с указанием
имени и адреса автора (по желанию), если они соответствуют
тематике и не содержат рекламы и персональных атак.
На письма с очень часто задаваемыми вопросами я постараюсь ответить
сразу, не помещая их в рассылку.
Таким образом, надеюсь, что подписка будет интересной для Вас
и в то же время не будет заполнена часто задаваемыми вопросами.
Здесь я приведу причины, почему эта платформа лучше для того, чтобы
избежать в дальнейшем перепалок вида C# vs что-либо. Корректные письма,
в которых есть что-либо новое будут приниматься и публиковаться.
1) В C# можно прервать выполнение нити в любой момент
Для того, чтобы прервать нить, достаточно вызвать ее метод,
который приведет к генерированию специального исключения
в одной из "безопасных точек" (safe points).
C# - вообще единственный язык, где можно остановить нить без проблем
(подробно о том, как это достигается позже)
В Java есть похожий метод, однако он помечен,
как нерекомендованный к использованию (deprecated),
так как его вызов может привести к утечке ресурсов.
Под ресурсами здесь понимаются
незакрытые файлы,
указатели на системные структуры (handles)
соединения с базами данных
и другие (кстати, какие?)
подобные ресурсы (а синоним слову
ресурс?)
не учитываемые при автоматическом освобождении памяти (garbage collection).
Можно, конечно, использовать finalize, однако это не очень хорошо
(почему - я расскажу позже).
2) В C# есть препроцессор.
Конечно препроцессор гораздо проще, чем в C/C++ (нет макроподстановок),
однако
он позволяет сделать то, что нельзя сделать в Java - получить Debug и
Release
версии проекта только изменением настроек компилятора (без изменения
исходных
текстов программы). В Java можно определить константы, которые затем
использовать
для исключения частей кода из Release конфигурации. Однако для сборки разных
версий проекта прийдется менять исходные тексты проекта. Если же заменить
константы на переменные, значения которых узнается во время работы
программы,
то отладочный код не сможет быть исключен компилятором.
Кроме того, мне кажется, что вариант программы с директивами
препроцессора нагляднее выражает то, что я хотел сделать.
3) Пространства имен и классы не привязаны к файлам
Это удобно, так как можно иметь малое количество файлов с исходными текстами
и использовать файлы в solution explorer'e, как схему программы.
4) Комментарии пишутся в виде XML, а не странных тегов javadoc
5) Студия взяла все лучшее из редактора Delphi
Мне гораздо более удобен в использовании принцип панелей и привязок,
чем механизм менеждеров расположения (layout managers)
Кроме того, в новой студии лучше сделана интеграция с Source Safe,
редактор позволяет просматривать код по частям, сворачивая ненужные функции
(кстати, он печатает в таком же виде, не разворачивая, что очень удобно)
1) В C# есть автоматическая сборка мусора
Хорошая автоматическая сборка мусора не может быть сделана без поддержки
компилятора, поэтому на C++ можно реализовать только частичное решение,
например консервативное управление памятью (впрочем, о управлении памятью
позже).
2) В C# есть понятия интерфейсов и свойств
Это позволяет не мучаться с разделением наследования на наследование
интерфейсов
и наследование реализации, однако добавляет проблемы самой реализации.
Теперь потребуется
писать большее количество вспомогательных классов.
3) В C# есть расширяемая информация о типах
Расширяемость этой информации позволяет проще реализовать такие вещи,
как отображение объеков на реляционные базы данных, реализацию систем
помощи и другие (какие?)
- Решен вопрос с версиями, их обновлением и необновлением при необходимости
(assemblies)
- самая полная система помощи (и к тому же официальная, т.е. например
описание windows сделано командой microsoft)
MSIL - промежуточный язык платформы .NET
напоминает на байт кода Java. Для Java уже написаны как декомпиляторы
байткода
в исходный текст на Java, так и программы затрудняющие подобное
преобразование
при помощи оптимизации и запутывания байткода.
Есть ли в .NET возможность затруднить
восстановление прогаммы из .exe-файла?
Вам предлагается шуточный тест на звание
сертифицированного подписчика данной рассылки :)
Присылайте на адрес level3@mail.ru
не только ответы, но и объяснения к ним
#1. Рассмотрим объявление:
char[] greeting = "hello";
Сколько байтов занимает данный массив?
#2. Рассмотрим выражение:
(!7 > (2 || 15)) && (2 / 0)
Результат работы данного выражения:
(a) ошибка на этапе компиляции (деление на ноль)
(b) ошибка во время выполнения
(c) истина
(d) ложь
(e) другой вариант
Бонус:
Есть термин "байт". Как называли раньше четыре бита?