C# для профессионалов. Том II
Шрифт:
В C# реализовано двунаправленное преобразование между ссылками и типами данных значений, называемое упаковкой и распаковкой. Эта функциональность не поддерживается в Java. C# поддерживает использование классов, укомплектованных полями, конструкторами и методами в качестве шаблонов для описания типов данных, и предоставляет возможность определить деструкторы — методы, вызываемые перед тем, как класс попадает к сборщику мусора. C# предоставляет также три подхода к параметрам методов —
C# вводит также концепцию сокрытия методов, а также поддержку
Пространства имен C# предоставляют значительно более гибкий способ группирования связанных классов. В C# возможна эмуляция препроцессора, код условно включается или исключается на основе существования определенных символов. C# предоставляет модель безопасности на основе полномочий, которой можно управлять программным путем.
Приложение C
C# для разработчиков VB6
В этом приложении будет представлено краткое введение в язык C#, специально предназначенное для тех разработчиков, опыт которых до сих пор был частично или полностью связан с Visual Basic 6.
Отметим, что в рамках этого приложения аббревиатура VB означает VB6. В тех случаях, когда говорится о VB.NET, это указывается явно.
C# и Visual Basic являются очень разными языками как в своих синтаксических стилях, так и в фундаментальных концепциях, на которых они основываются. Это означает, что разработчикам Visual Basic потребуются существенные усилия, чтобы освоиться с C# даже на базовом уровне. С помощью этого приложения мы попытаемся облегчить процесс обучения, предоставив введение в C#, которое специально предполагает знание VB, и сосредоточившись на основных концептуальных различиях между двумя языками. В ходе этого приложения будет проведено сравнение, как кодировать решения проблемы в VB и в C#, представляя вместе код C# и код VB.
Это означает, что рассмотрение языка C# ограничится базовым уровнем, здесь не будут рассмотрены более развитые свойства языка, им посвящены учебные главы основного текста книги. Мы сосредоточим внимание на различных методологиях, вовлеченных в написание кода с помощью языка C#.
Различия между C# и VB
Помимо очевидных синтаксических различий между языками, существуют две основные концепции, которые необходимо знать, чтобы можно было двигаться от VB к C#:
1. Концепция полного потока выполнения программы от начала до конца. Visual Basic скрывает этот аспект программ, так что в модулях классов кодируется только часть программы VB, связанная с обработкой событий и всеми методами. C# делает доступной всю программу в виде исходного кода. Это объясняется тем, что C# можно философски рассматривать как последующую генерацию C++, а корни C++ уходят в 60-е годы. C++ предшествовал оконным интерфейсам пользователя и развитым операционным системам. C++ развился как низкоуровневый, близкий к машине универсальный язык программирования. Написать приложение GUI с помощью C++ означает, что необходимо явно вызвать системные вызовы для создания и взаимодействия с оконными формами. Язык C# построили на этом наследии, упростив и модернизировав C++ так, чтобы низкоуровневые преимущества C++ в производительности можно было достичь
2. Классы и наследование C# значительно более объектно-ориентированны, чем в VB, при условии, что весь код является частью класса. Он обеспечивает также исчерпывающую поддержку наследования реализации. На самом деле большинство хорошо спроектированных программ C# будут в значительной степени отвечать этой форме наследования, которая полностью отсутствует в VB.
Основная часть этого приложения посвящена разработке двух примеров, для которых будут закодированы версии на VB и C#. Первый пример является простой формой, запрашивающей у пользователя число и выводящей квадратный корень и знак числа. Сравнивая подробно версии примера на VB и C#, мы увидим базовый синтаксис C# и поймем концепции, которые лежат в основе потока выполнения программы.
Затем будет представлен модуль класса VB, который хранит информацию о сотрудниках, и его эквивалент в C#. Здесь мы начнем знакомиться с реальной мощью C#, так как при добавлении свойств в примеры быстро станет понятно, что VB просто не поддерживает концепции, которые нужны для разработки модуля класса согласно заданным требованиям, и придется продолжать только на C#.
Приложение будет закончено кратким обзором некоторых из оставшихся различий между VB и C#, не показанных в примерах.
Однако прежде чем начать, необходимо разобрать несколько концепций, касающихся классов, компиляции и базовых классов .NET.
Классы
В этом приложении будут достаточно интенсивно использоваться классы C#. Они представляют собой точно определенные объекты, которые подробно рассматриваются в главах 4 и 5. Но для логичности изложения лучше представлять их как эквиваленты C# модулей классов VB, так как они являются достаточно похожими сущностями. Подобно модулю класса VB, класс C# реализует свойства и методы и содержит переменные члены. Так же как для модуля класса VB, можно создавать объекты заданного класса C# (экземпляры класса) с помощью оператора new. За этим сходством, однако, скрывается много различии. Например, модуль класса VB является на самом деле классом COM. Классы C#, напротив, обычно не являются классами COM, но они всегда интегрированы в среду .NET. Классы C# являются также более динамичными чем их аналоги VB/COM, в том смысле, что они обеспечивают более высокую производительность и дают меньшую потерю быстродействия при создании экземпляра. Но эти различия мы почти не будем учитывать при обсуждении языка C#.
Компиляция
Вы наверняка хорошо знаете, что компьютер никогда не выполняет напрямую код на любом языке высокого уровня, будь это VB, C++, С или любой другой язык. Вместо этого весь исходный код сначала транслируется в собственный исполнимый код машины с помощью процесса, обычно называемого компиляцией. При отладке VB предлагает возможность просто выполнить код сразу (то есть, когда каждая строка кода VB компилируется, или в этом случае говорят, что код интерпретируется, так как компьютер готов выполнить эту строку кода) либо произвести полную компиляцию (так, что вся программа сначала транслируется в исполнимый код, а затем начинается его реализация). Выполнение в начале полной компиляции означает, что все синтаксические ошибки обнаруживаются компилятором до того, как программа заработает. Это ведет к более высокой производительности и допускается только в C#.