Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #40, МАРТ 2004 г.

Программирование в XP

Tony

Спецвыпуск Xakep, номер #040, стр. 040-076-6


Управляемым он назван потому, что CLR - среда выполнения этого кода, скрывающая особенности API от клиента, управляет выделением и освобождением памяти под объекты и данные. Интересно здесь не выделение (которое по традиции происходит с помощью оператора new), а именно освобождение памяти, которым управляет так называемый “Сборщик мусора” (Garbage Collector).

Сборщик мусора - это специальный механизм, который занимается тем, чем пользователю заниматься не обязательно. Допустим, ты создал объект, использовал его, и он тебе становится не нужным. В C++ в этом случае для этого объекта вызывался оператор delete. В .NET за тебя думает сборщик мусора. С одной стороны, это хорошо, потому что тебе не надо заботиться о жизненном цикле твоих объектов, ссылки подсчитают за тебя, с другой стороны, черт его знает, когда этот сборщик почешется, чтобы освободить так нужную тебе память. Тем не менее, существует способ заставить сборщик мусора шевелиться быстрее. Для этого тебе нужно в своем объекте реализовать интерфейс IDisposable, который содержит единственный метод Dispose(). Внутри этого метода ты должен освободить все объекты - члены твоего класса. Вызов метода Dispose() в контексте твоего класса моментально удалит этот объект, минуя сборщик и его “бюрократию”. Также можно взаимодействовать со сборщиком мусора напрямую, для этого существует класс System.GC.

Язык C#

Язык C# - это родной язык платформы .NET. Архитектура языка C# использует лучшие стороны сразу трех языков: C++, Java, Visual Basic. Казалось бы, должен был получиться очередной уродец, однако должен признать, что Microsoft удалось сделать действительно удачный инструмент, который ожидает, судя по всему, большое будущее. Первое, что бросается в глаза, это то, что в нем отсутствуют указатели. Конечно, если тебе нужны указатели, ты можешь их использовать, однако можно прекрасно обойтись и без них. С одной стороны, это несколько непривычно для поклонников классического языка С и С++, однако стоит вспомнить, что Бьярни ввел в C++ ссылки, которые в большинстве случаев полностью заменяли указатели.

Кроме того, использование ссылок на объекты (а не указателей) позволяет сделать код более безопасным с точки зрения несанкционированного обращения к чужим ресурсам, ведь указатель - это не что иное, как адрес места в памяти, где лежит твой объект. Иными словами, архитектурно язык C# не позволяет напрямую работать с памятью, а позволяет работать только с объектами (типами). Из этого вытекает следующая его особенность - автоматическое управление памятью.

С# - это объектно-ориентированный язык, который поддерживает все то, что было в C++, кроме шаблонов. Обламывает, но... Я тебе расскажу по секрету, что все типы данных производны от типа object. И ты просто можешь использовать в качестве хранилища данных переменную типа object, в которую упаковываются все твои char, int, double и т.д. Ну, а потом так же прекрасно распаковываются в нужный тебе тип. Конечно, с шаблонами это не сравнится, но все же неплохо.

Назад на стр. 040-076-5  Содержание  Вперед на стр. 040-076-7