В результате обработки программы компилятором С#, Visual Basic .NET или любым другим компилятором способным генерировать CIL, получают управляемый модуль (managed module), т. е. просто исполняемый файл, предназначенный для исполнения CLR.
В традиционных программных средах объекты создаются и уничтожаются в точные, определенные моменты времени. В качестве примера рассмотрим класс, написанный на неуправляемом C++...
Благодаря упаковке/распаковке программист не замечает разделения на ссылочные и размерные типы. И все же иногда нужно знать, с какими типами вы работаете. Ведь тонкие различия между этими двумя разновидностями типов могут оказать на приложение такое воздействие, которого вы никак не ожидали.
Разработчики .NET Framework могли бы сделать все типы ссылочными, но они предпочли поддерживать еще и размерные типы, чтобы избежать неоправданных издержек при использовании целых чисел и других элементарных типов данных.
Если все, что вы пока узнали в главе 1, кажется вам безнадежной абстракцией, не падайте духом: сейчас все станет очень конкретным. Пора создать ваше первое приложение для .NET Framework. И конечно, лучше всего начать с управляемой версии «Hello, world». Для простоты мы напишем консольное приложение — исполняющееся в окне командной строки. Это позволит ограничиться небольшим объемом кода и сосредоточиться на наиболее важных вопросах.
Рассмотрим программу на рис. 1-4- Для начинающих: в каждом приложении должна быть точка входа. В Си-приложении таковой является статический метод с именем Main. Он есть в каждом С#-приложении. Так как в С# каждый метод должен принадлежать какому-либо типу, в Hello.cs метод Main является членом МуАрр. В имени класса ничего волшебного. Мы могли бы назвать его Foo, и он работал бы так же. Если в приложении несколько классов с методами Main, класс, содержащий точку входа приложения указывается с ключом компилятора /main.
Делегаты часто смущают новичков в .NET Framework. Делегат представляет собой оболочку функции обратного вызова, обеспечивающую контроль типов. Можно без труда написать приложение на неуправляемом C++, которое рухнет при выполнении обратного вызова. Но делегаты просто не позволяют написать управляемое приложение, которое проделало бы то же самое.
Перечисления в .NET Framework подобны перечислениям в C++. Они являются типами, состоящими из множества именованных констант и в С# определяются ключевым словом enum. Вот пример простого перечислимого типа Color.
Интерфейс — это группа из ноля или более абстрактных методов, т. е. таких методов, у которых нет реализации по умолчанию, но которые реализуются в классах или структурах. Интерфейсы могут также содержать свойства и события, но методы распространены гораздо шире.