Sharpdevelop

Библиотеки

Спецификация C # описывает минимальный набор типов и библиотек классов, которые компилятор ожидает иметь в наличии. На практике C # чаще всего используется с некоторой реализацией Common Language Infrastructure (CLI), которая стандартизирована как Common Language Infrastructure (CLI) ECMA-335 .

В дополнение к стандартным спецификациям интерфейса командной строки существует множество коммерческих и общественных библиотек, которые строятся на основе библиотек .NET framework для обеспечения дополнительных функций.

C # может вызывать любую библиотеку, включенную в Список библиотек и фреймворков .NET .

Система общих типов

C # имеет единую систему типов . Эта унифицированная система типов называется системой общих типов (CTS).

Унифицированная система типов подразумевает, что все типы, включая примитивы, такие как целые числа, являются подклассами класса. Например, каждый тип наследует метод.

Категории типов данных

CTS разделяет типы данных на две категории:

  1. Типы ссылок
  2. Типы значений

Экземпляры типов значений не имеют ни ссылочной идентичности, ни ссылочной семантики сравнения. Сравнение равенства и неравенства для типов значений сравнивает фактические значения данных в экземплярах, если соответствующие операторы не перегружены. Типы значений являются производными , всегда имеют значение по умолчанию и всегда могут быть созданы и скопированы. Некоторые другие ограничения типов значений состоят в том, что они не могут быть производными друг от друга (но могут реализовывать интерфейсы) и не могут иметь явного конструктора по умолчанию (без параметров). Примерами типов значений являются все примитивные типы, такие как (32-битное целое число со знаком), (32-битное число с плавающей запятой IEEE), (16-битная единица кода Unicode) и (идентифицирует конкретный момент времени. с точностью до наносекунды). Другими примерами являются (перечисления) и (определяемые пользователем структуры).

Напротив, ссылочные типы имеют понятие ссылочной идентичности, что означает, что каждый экземпляр ссылочного типа по своей сути отличается от любого другого экземпляра, даже если данные в обоих экземплярах одинаковы. Это отражается в сравнении равенства и неравенства по умолчанию для ссылочных типов, которые проверяют ссылочное, а не структурное равенство, если только соответствующие операторы не перегружены (например, в случае ). Некоторые операции не всегда возможны, например создание экземпляра ссылочного типа, копирование существующего экземпляра или выполнение сравнения значений двух существующих экземпляров. Хотя определенные ссылочные типы могут предоставлять такие услуги, открывая открытый конструктор или реализуя соответствующий интерфейс (например, или ). Примеры ссылочных типов: (конечный базовый класс для всех других классов C #), (строка символов Юникода) и (базовый класс для всех массивов C #).

Обе категории типов могут быть расширены с помощью типов, определяемых пользователем.

Бокс и распаковка

Упаковка — это операция преобразования объекта-значения в значение соответствующего ссылочного типа. Бокс в C # неявный.

Распаковка — это операция преобразования значения ссылочного типа (ранее упакованного) в значение типа значения. Распаковка в C # требует явного приведения типа . Упакованный объект типа T может быть распакован только в T (или T, допускающий значение NULL).

Пример:

int foo = 42;         // Value type.
object bar = foo;     // foo is boxed to bar.
int foo2 = (int)bar;  // Unboxed back to value type.

Цели дизайна

Стандарт Ecma перечисляет следующие цели проектирования для C #:

  • Этот язык задуман как простой, современный объектно-ориентированный язык программирования общего назначения .
  • Язык и его реализации должны обеспечивать поддержку принципов разработки программного обеспечения, таких как строгая проверка типов, проверка границ массива , обнаружение попыток использования неинициализированных переменных и автоматическая сборка мусора . Важны надежность, надежность и продуктивность программного обеспечения.
  • Язык предназначен для использования при разработке программных компонентов, подходящих для развертывания в распределенных средах.
  • Переносимость очень важна для исходного кода и программистов , особенно тех, кто уже знаком с C и C ++ .
  • Поддержка интернационализации очень важна.
  • C # предназначен для написания приложений как для размещенных, так и для встроенных систем , от очень больших, использующих сложные операционные системы , до очень маленьких, имеющих специальные функции.
  • Хотя приложения C # должны быть экономичными в отношении требований к памяти и вычислительной мощности , язык не предназначался для прямой конкуренции по производительности и размеру с C или языком ассемблера.

Реализации

Microsoft возглавляет разработку эталонных компиляторов C # с открытым исходным кодом и набора инструментов. Первый компилятор, Roslyn , компилируется в промежуточный язык (IL), а второй, RyuJIT, представляет собой JIT-компилятор (точно в срок), который является динамическим, выполняет оптимизацию на лету и компилирует IL в собственный код для внешнего интерфейса процессора. RyuJIT имеет открытый исходный код и написан на C ++. Roslyn полностью написан на управляемом коде (C #), открыт, а функциональность представлена ​​в виде API. Таким образом, это позволяет разработчикам создавать инструменты рефакторинга и диагностики. Две ветви официальной реализации: .NET Framework (с закрытым исходным кодом, только для Windows) и .NET Core (с открытым исходным кодом, кросс-платформенный); в конечном итоге они объединились в одну реализацию с открытым исходным кодом: .NET 5.0. В .NET Framework 4.6 новый JIT-компилятор заменил прежний.

Другие компиляторы C # (некоторые из которых включают реализацию библиотеки классов Common Language Infrastructure и .NET):

  • Mono , проект, спонсируемый Microsoft, предоставляет компилятор C # с открытым исходным кодом, полную реализацию интерфейса командной строки с открытым исходным кодом (включая необходимые библиотеки фреймворка, как они указаны в спецификации ECMA) и почти полную реализацию библиотек классов NET. в .NET Framework 3.5.
  • Элементы инструмента цепь из RemObjects включает RemObjects C #, который компилирует C # код для .NET в Common Intermediate Language , Java байткод , какао , Android байткод , WebAssembly и машинный код для Windows, MacOS и Linux.
  • Проект DotGNU (сейчас прекращенный) также предоставил компилятор C # с открытым исходным кодом, почти полную реализацию Common Language Infrastructure, включая необходимые библиотеки фреймворка, как они указаны в спецификации ECMA, и подмножество некоторых оставшихся проприетарных классов Microsoft .NET. библиотеки до .NET 2.0 (не задокументированные и не включенные в спецификацию ECMA, но включенные в стандартный дистрибутив Microsoft .NET Framework).

Игровой движок Unity использует C # в качестве основного языка сценариев. В игровом движке Godot реализован дополнительный модуль C # благодаря пожертвованию в размере 24 000 долларов от Microsoft.

Синтаксис

Основной синтаксис языка C # аналогичен синтаксису других языков C-стиля, таких как C, C ++ и Java, в частности:

  • Точка с запятой используется для обозначения конца инструкции.
  • Фигурные скобки используются для группировки операторов. Операторы обычно группируются в методы (функции), методы в классы и классы в пространства имен .
  • Переменные назначаются с использованием знака равенства , но сравниваются с использованием двух последовательных знаков равенства .
  • Квадратные скобки используются с массивами как для их объявления, так и для получения значения по заданному индексу в одном из них.

Функции

SharpDevelop был разработан как бесплатная и легкая альтернатива Microsoft Visual Studio и содержит эквивалентную функцию почти для всех основных функций Visual Studio Express и функции, очень похожие на те, что есть в Borland Kylix и Delphi , включая расширенное управление проектами, редактирование кода, компиляцию приложений. и функции отладки. В частности, IDE включает в себя конструктор графического интерфейса , представления кода / дизайна, подсветку синтаксиса , меню автозаполнения (аналогично IntelliSense ), возможность компилировать и отлаживать формы / консольные приложения .NET Framework , мастер «Новый проект» , панели инструментов, меню , панели и стыковочная система, а также встроенные инструменты рефакторинга кода , а также встроенный отладчик, который позволяет выполнять пошаговое выполнение, просматривать значения объектов в памяти и точки останова .

Чтобы упростить миграцию проекта, SharpDevelop изначально работает с файлами проектов и кода Visual Studio. Он может компилировать приложения для .NET Framework версий 2.0, 3.0, 3.5, 4.0, 4.5.1 и .NET Compact Framework 2.0 и 3.5.

Дизайнеры графического интерфейса SharpDevelop работают с языками C #, VB.NET, Boo, а также с языками IronPython и IronRuby, используя следующие технологии графического интерфейса пользователя:

  • Windows Forms
  • Windows Presentation Foundation (WPF)
  • Entity Framework

SharpDevelop полностью написан на C # и состоит примерно из 20 компонентов, которые объединяются в приложение. Компонент редактора исходного кода известен как AvalonEdit и может использоваться другими приложениями.

Он также включает в себя функции для:

  • Внешние компоненты COM и ActiveX
  • Анализ кода ( FxCop )
  • Модульное тестирование ( NUnit )
  • Покрытие кода (PartCover)
  • Профайлер
  • Subversion (TortoiseSVN)
  • Git
  • Mercurial
  • StyleCop Аддин
  • Генерация документации ( Sandcastle , SHFB)
  • Плагины

Примеры

Привет, мир

Ниже приводится очень простая программа на C #, версия классического примера » Hello world «, использующая функцию операторов верхнего уровня, представленную в C # 9:

using System;

Console.WriteLine("Hello, world!");

Для кода, написанного как C # 8 или ниже, логика точки входа программы должна быть написана в методе Main внутри типа:

using System;

// A version of the classic "Hello World" program
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Hello, world!");
    }
}

Этот код отобразит этот текст в окне консоли:

Hello, world!

У каждой строки есть цель:

using System;

Вышеупомянутая строка импортирует все типы в пространстве имен. Например, класс, используемый позже в исходном коде, определяется в пространстве имен, то есть его можно использовать без предоставления полного имени типа (которое включает пространство имен).

// A version of the classic "Hello World" program

Эта строка является комментарием; он описывает и документирует код для программиста (ов).

class Program

Выше приведено определение класса для класса. Все, что следует между скобками, описывает этот класс.

{
    ...
}

Фигурные скобки обозначают границы блока кода. В этом первом случае они отмечают начало и конец занятия.

static void Main(string[] args)

Это объявляет метод члена класса, с которого программа начинает выполнение. Среда выполнения .NET вызывает метод. В отличие от Java , методу не требуется ключевое слово, которое сообщает компилятору, что метод может быть вызван из любого места любым классом. Письмо эквивалентно письму . делает метод доступным без экземпляра . Точка входа каждого консольного приложения должна быть объявлена, иначе программе потребуется экземпляр , но любому экземпляру потребуется программа. Чтобы избежать этой неразрешимой круговой зависимости , компиляторы C #, обрабатывающие консольные приложения (например, указанные выше), сообщают об ошибке, если метод отсутствует . Ключевое слово заявляет , что не имеет возвращаемого значения .

Console.WriteLine("Hello, world!");

Эта строка записывает вывод. является статическим классом в пространстве имен. Он предоставляет интерфейс для стандартных потоков ввода, вывода и ошибок для консольных приложений. Программа вызывает метод , который отображает на консоли строку с аргументом — строкой .

GUI

Пример графического интерфейса :

using System;
using System.Windows.Forms;

class Program
{
    static void Main()
    {
        MessageBox.Show("Hello, World!");
        Console.WriteLine("Is almost the same argument!");
    }
}

Этот пример аналогичен предыдущему, за исключением того, что он генерирует диалоговое окно , содержащее сообщение «Hello, World!» вместо записи в консоль.

Изображений

Еще одна полезная библиотека — это библиотека, которая используется для программного рисования изображений. Например:

using System;
using System.Drawing;

public class Example
{
    public static Image img;

    static void Main()
    {
        img = Image.FromFile("Image.png");
    }
}

Это создаст изображение, идентичное тому, что хранится в «Image.png».

Стандартизация и лицензирование

В августе 2001 года Microsoft , Hewlett-Packard и Intel совместно спонсировали предоставление спецификаций C #, а также Common Language Infrastructure (CLI) организации по стандартизации Ecma International . В декабре 2001 года ECMA выпустила спецификацию языка C # ECMA-334 . C # стал стандартом ISO в 2003 году (ISO / IEC 23270: 2003 — Информационные технологии — Языки программирования — C # ). ECMA ранее принимала эквивалентные спецификации в качестве 2-го издания C # в декабре 2002 г. В июне 2005 г. ECMA одобрила издание 3 спецификации C # и обновила ECMA-334. Добавления включали частичные классы, анонимные методы, типы, допускающие значение NULL, и универсальные шаблоны (в чем-то похожие на шаблоны C ++ ). В июле 2005 года ECMA представила в ISO / IEC JTC 1 через ускоренный процесс последнего стандарты и соответствующие ТУ. Обычно этот процесс занимает 6–9 месяцев.

Определение языка C # и интерфейс командной строки стандартизированы в соответствии со стандартами ISO и Ecma, которые обеспечивают разумную и недискриминационную лицензионную защиту от патентных притязаний.

Изначально Microsoft согласилась не предъявлять иски разработчикам ПО с открытым исходным кодом за нарушение патентов в некоммерческих проектах в отношении той части платформы, на которую распространяется OSP. Microsoft также согласилась не применять патенты, относящиеся к продуктам Novell, против платежеспособных клиентов Novell, за исключением списка продуктов, в которых явно не упоминается C #, .NET или реализация .NET от Novell ( The Mono Project ). Однако Novell утверждает, что Mono не нарушает никаких патентов Microsoft. Microsoft также заключила конкретное соглашение не обеспечивать соблюдение патентных прав, связанных с подключаемым модулем браузера Moonlight , который зависит от Mono, при условии, что он получен через Novell.

Десять лет спустя Microsoft начала разрабатывать бесплатные кроссплатформенные инструменты с открытым исходным кодом для C #, а именно Visual Studio Code , .NET Core и Roslyn . Моно присоединился к Microsoft как проект Xamarin , дочерней компании Microsoft.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector