Опубликован: 23.07.2006 | Доступ: свободный | Студентов: 2213 / 889 | Оценка: 4.28 / 4.17 | Длительность: 21:37:00
Специальности: Системный архитектор
Лекция 2:

Обзор языка C#

< Лекция 1 || Лекция 2: 123456 || Лекция 3 >
Аннотация: Основные идеи создания C#. Базовые конструкции языка. Препроцессор C#. Системные и пользовательские атрибуты. Опасный код в C#. Описание языка C-бемоль, являющегося подмножеством C#.
Ключевые слова: net, операции, visual, стандарт языка, дизайн, эволюция, язык программирования, PL/I, Паскаль, Java, неявное преобразование, конструкции управления, операторы, if, значение, ветка, CASE, класс, интерфейс, объект, система типов, типы-значения, примитивный тип данных, ссылочный тип, адрес, массив, программа, инкапсуляция данных, инициализация, компилятор, конструктор, определение, переменная, матрица, освобождение памяти, сборка мусора, пользователь, ключевое слово, перегрузка метода, new, доступ, описание поля, индексатор, ключ, прямой, перегрузка, вызов метода, запись, умножение, деление, потеря точности, обратное преобразование, произвольное, аргумент, перегруженный метод, список, препроцессор, механизм условной компиляции, IDL, информация, время компиляции, целый, атрибут, API, идентификатор, аспектно-ориентированное программирование, workshop, aspect, programming, указатель, механизмы

Причины возникновения языка C#

Главной особенностью языка C# является его ориентированность на платформу Microsoft .NET - создатели C# ставили своей целью предоставление разработчикам естественных средств доступа ко всем возможностям платформы .NET. Видимо, это решение можно считать более или менее вынужденным, так как платформа .NET изначально предлагала значительно большую функциональность, чем любой из существовавших на тот момент языков программирования.

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

Еще одно преимущество создания нового языка программирования по сравнению с расширением существующих заключается в том, что при создании нового языка нет необходимости заботиться о проблемах обратной совместимости, которые обычно заметно затрудняют исправление застарелых проблем и даже внесение новых свойств в стандарт языка (подробное описание трудностей, возникающих при расширении старого языка программирования, можно прочитать в книге Б. Страуструпа "Дизайн и эволюция языка С++", М.: ДМК, 2000).

Таким образом, C# представляет собой новый язык программирования, ориентированный на разработку для платформы .NET и пригодный как для быстрого прототипирования приложений, так и для разработки крупномасштабных приложений.

Простота C#

Многие существующие языки программирования обладают весьма запутанным синтаксисом и конструкциями с неочевидной семантикой - достаточно вспомнить сверхперегруженную значениями открывающую фигурную скобку в С++, использование ключевых слов в качестве идентификаторов в PL/I или проблемы отличия описателей видов от операций в Алголе 68. Все эти языковые особенности затрудняют написание компиляторов и служат источником труднонаходимых ошибок при создании программ. На другом полюсе этой проблемы находится язык Паскаль, в котором в целях упрощения было решено пожертвовать даже очевидно удобными для программиста свойствами.

C# занимает некоторую промежуточную позицию: из стандарта языка убраны наиболее неприятные и неоднозначные особенности С++, но в то же время язык сохранил мощные выразительные возможности, присущие для таких языков, как С++, Java или VB.

Укажем некоторые особенности языка С++, которые не поддерживаются C#:

  • По умолчанию, С# запрещает прямое манипулирование памятью, предоставляя взамен богатую систему типов и сборку мусора. Непосредственная работа с памятью по-прежнему доступна в специальном режиме "опасного" кода (об этом см. ниже), но требует явного декларирования. Как следствие, в C# активно используется всего один оператор доступа " ."
  • Преобразования типов в C# значительно строже, чем в С++, в частности, большинство преобразований может быть совершено только явным образом. Кроме того, все приведения должны быть безопасными (т.е. запрещены неявные преобразования с переполнением, использование целых переменных как указателей и т.п.). Естественно, это заметно упрощает анализ типов при компиляции
  • Одной из типичных ошибок в С++ было отсутствие оператора break при обработке одной из веток оператора switch . Проблема "провала" (fall-through) в C# решена кардинальным образом: компилятор требует наличия явного оператора перехода ( break или goto case <name> ) в любой ветке
  • В C#, как и в Java, нет множественного наследования, вместо него предлагается использовать реализацию нескольких интерфейсов. Несмотря на то, что мнения по поводу множественного наследования сильно разнятся, отсутствие этого механизма в C# должно по крайней мере облегчить разработку компилятора
< Лекция 1 || Лекция 2: 123456 || Лекция 3 >