Скачать презентацию C и NET Framework Автор материала Семён Скачать презентацию C и NET Framework Автор материала Семён

25/10/2013 C# lect.1.ppt

  • Количество слайдов: 55

C# и. NET Framework C# и. NET Framework

Автор материала: Семён Факторович, НГУ оф. сайт курса: http: //bit. ly/nsudotnet Автор материала: Семён Факторович, НГУ оф. сайт курса: http: //bit. ly/nsudotnet

Программа на сегодня • Основные особенности C#: почему деструкторы больше не нужны? • Применение Программа на сегодня • Основные особенности C#: почему деструкторы больше не нужны? • Применение в индустрии: на чем написан движок stackoverflow. com? • Кросс-платформенность: как запустить один и тот же код под Win, Linux и Mac OS?

Язык C# • C# [си-шарп] — объектно-ориентированный язык со строгой типизацией. Язык C# • C# [си-шарп] — объектно-ориентированный язык со строгой типизацией.

Язык C# • Первая версия языка – 2002 год, Microsoft – 2006, C# 2. Язык C# • Первая версия языка – 2002 год, Microsoft – 2006, C# 2. 0: Generics – 2007, C# 3. 0: Lambda functions – 2010, C# 4. 0, асинхронные методы – 2012, С# 5. 0, “compiler as a service”

Синтаксис языка using System; namespace Course { class Program { static void Main(string[] args) Синтаксис языка using System; namespace Course { class Program { static void Main(string[] args) { Console. Write. Line("Hello world!"); } } }

Фишки языка Встроенный тип object, от которого наследуются все другие типы string s = Фишки языка Встроенный тип object, от которого наследуются все другие типы string s = "Test"; object o = (object)s;

Фишки языка Встроенный тип object, от которого наследуются все другие типы int i = Фишки языка Встроенный тип object, от которого наследуются все другие типы int i = 3; object o 2 = (object)i;

Фишки языка Встроенный тип object, от которого наследуются все другие типы int i = Фишки языка Встроенный тип object, от которого наследуются все другие типы int i = 3; object o 2 = (object)i;

Фишки языка Встроенный тип object, от которого наследуются все другие типы string s 2 Фишки языка Встроенный тип object, от которого наследуются все другие типы string s 2 = (2+3). To. String();

Фишки языка Никакого delete string[] array = new string[10]; array[1] = Фишки языка Никакого delete string[] array = new string[10]; array[1] = "abc"; // delete[] array; Выделенная память высвобождается сборщиком мусора (garbage collector)

Фишки языка Рефлексия (reflection) string s = Фишки языка Рефлексия (reflection) string s = "test"; if (s. Get. Type() == typeof(string)) { //. . . }

Фишки языка Рефлексия (reflection) string s = Фишки языка Рефлексия (reflection) string s = "test"; if (s. Get. Type() == typeof(string)) { //. . . } if (s is string) { //. . . }

Фишки языка Рефлексия (reflection) string s = Фишки языка Рефлексия (reflection) string s = "test"; Type type = s. Get. Type(); string name = type. Name; // "String"

Фишки языка Рефлексия (reflection) string s = Фишки языка Рефлексия (reflection) string s = "test"; Type type = s. Get. Type(); string member. Name = type. Get. Members()[3]. Name; // Join()"

Фишки языка Рефлексия (reflection) Type my. Type = Reflection. Emit. Type. Builder. Get. Type( Фишки языка Рефлексия (reflection) Type my. Type = Reflection. Emit. Type. Builder. Get. Type("System. String"); object obj = Activator. Create. Instance(my. Type); string str = (string)obj;

Фишки языка LINQ int[] numbers = {5, 4, 1, 3, 9}; IEnumerable<int> low. Nums Фишки языка LINQ int[] numbers = {5, 4, 1, 3, 9}; IEnumerable low. Nums = from n in numbers where n < 5 select n; // {4, 1, 3}

Фишки языка LINQ int[] numbers = {5, 4, 1, 3, 9}; IEnumerable<int> low. Nums Фишки языка LINQ int[] numbers = {5, 4, 1, 3, 9}; IEnumerable low. Nums = from n in numbers where n < 5 select n; // low. Nums содержит {4, 1, 3} // Эквивалентно low. Nums = numbers. Where(n => n < 5);

Фишки языка Фишки языка

Фишки языка Делегаты: замена указателям на функции delegate int My. Delegate(int i); int Square(int Фишки языка Делегаты: замена указателям на функции delegate int My. Delegate(int i); int Square(int arg) { return arg * arg; } void My. Method() { My. Delegate del = Square; int res = del. Invoke(3); int res 2 = del(4); }

Фишки языка Автоматический вывод типа переменной var dict = new Dictionary<Key. Value. Pair<string, int>, Фишки языка Автоматический вывод типа переменной var dict = new Dictionary, List>(); // Вместо Dictionary, List> dict = new Dictionary, List>()

Фишки языка Встроенная система исключений Фишки языка Встроенная система исключений

Фишки языка Богатая стандартная библиотека Работа с высокоуровневыми сетевыми протоколами (XML, SMTP, HTTP) Криптография Фишки языка Богатая стандартная библиотека Работа с высокоуровневыми сетевыми протоколами (XML, SMTP, HTTP) Криптография Сериализация объектов Работа с файловой системой Работа с базами данных …

Что еще умеет язык? Консольные приложения GUI: Windows Forms и WPF Web development: ASP. Что еще умеет язык? Консольные приложения GUI: Windows Forms и WPF Web development: ASP. NET и ASP. NET MVC Web&mobile apps: Silverlight

Что на нём пишут? Enterprise (десктопные и серверные бизнесприложения под ключ) Web development Windows Что на нём пишут? Enterprise (десктопные и серверные бизнесприложения под ключ) Web development Windows Phone

А что хорошего уже написано? stackoverflow. com C# 3. 5, ASP. NET MVC, Windows А что хорошего уже написано? stackoverflow. com C# 3. 5, ASP. NET MVC, Windows Server 2008 google: stackoverflow architecture My. Space C# 2. 0, ASP. NET google: myspace architecture

Фишки языка C# - JIT-компилируемый язык Фишки языка C# - JIT-компилируемый язык

JIT-компиляция Компилируемые языки Интерпретируемые языки JIT-компиляция Компилируемые языки Интерпретируемые языки

JIT-компиляция Компилируемые языки С, С++, Pascal Исходный код переводится в машинные коды Машинный код JIT-компиляция Компилируемые языки С, С++, Pascal Исходный код переводится в машинные коды Машинный код исполняется процессором Не запустится на другой процессорной архитектуре (а также на другой ОС)

JIT-компиляция Интерпретируемые языки PHP, Perl, Python, Ruby, Java. Script Исходный код исполняется интерпретатором Запустится JIT-компиляция Интерпретируемые языки PHP, Perl, Python, Ruby, Java. Script Исходный код исполняется интерпретатором Запустится на любой архитектуре и в любой ОС, был бы интерпретатор Как правило, медленнее компилируемых языков

JIT-компиляция JIT-компилируемые языки C#, Java Исходный код компилируется в байт-код Среда исполнения переводит байт-код JIT-компиляция JIT-компилируемые языки C#, Java Исходный код компилируется в байт-код Среда исполнения переводит байт-код в машинный код для данного процессора Как правило, не медленнее компилируемых языков

JIT-компиляция Важные моменты Байткод не привязан к архитектуре и ОС (platform- agnostic) Есть и JIT-компиляция Важные моменты Байткод не привязан к архитектуре и ОС (platform- agnostic) Есть и компилятор, есть и среда исполнения Среда исполнения не интерпретирует байткод, а целиком (или по крайней мере, большими порциями) переводит его в машинный код

JIT-компиляция Важные моменты Байткод, который генерит компилятор C# - intermediate language, IL В Windows JIT-компиляция Важные моменты Байткод, который генерит компилятор C# - intermediate language, IL В Windows скомпилированный IL-файл имеет расширение *. exe

JIT-компиляция. NET executable PE header CLR metadata IL bytecode JIT-компиляция. NET executable PE header CLR metadata IL bytecode

JIT-компиляция Важные моменты На клиентских машинах должен быть установлен . NET Framework Начиная с JIT-компиляция Важные моменты На клиентских машинах должен быть установлен . NET Framework Начиная с Windows XP SP 2 он установлен по умолчанию В Windows Vista, Windows 7 и во всех Windows Server он уже есть

Структура. NET Framework Байт-код – intermediate language Среда исполнения байт-кода – CLR, Common Language Структура. NET Framework Байт-код – intermediate language Среда исполнения байт-кода – CLR, Common Language Runtime Помимо конвертации байт-кода CLR отвечает за: Управление памятью Создание и управление исключениями (exceptions) Управление потоками (threads)

Расширяемость. NET Открытая спецификация C# CLI, Common Language Infrastructure: открытая спецификация IL и принципов Расширяемость. NET Открытая спецификация C# CLI, Common Language Infrastructure: открытая спецификация IL и принципов работы среды исполнения IL

Расширяемость. NET Любой желающий может написать компилятор любого языка в IL Расширяемость. NET Любой желающий может написать компилятор любого языка в IL

Расширяемость. NET Любой желающий может написать компилятор любого языка в IL C#, Visual Basic. Расширяемость. NET Любой желающий может написать компилятор любого языка в IL C#, Visual Basic. NET, J# Python, Ruby, Fortran, F#, Nemerle, Scala…

Расширяемость. NET Полезный бонус: Спецификация обязывает каждый. NETсовместимый язык реализовывать одну и ту же Расширяемость. NET Полезный бонус: Спецификация обязывает каждый. NETсовместимый язык реализовывать одну и ту же базовую систему типов CTS, Common Type System

Расширяемость. NET Используете Iron. Python – имеете ту же систему базовых типов, что и Расширяемость. NET Используете Iron. Python – имеете ту же систему базовых типов, что и в C# String, работа с массивами, threading. . .

Расширяемость. NET Дальше – больше! Можно написать свою реализацию CLR (среды исполнения IL) . Расширяемость. NET Дальше – больше! Можно написать свою реализацию CLR (среды исполнения IL) . NET Framework и Microsoft CLR – одна из реализаций CLI

Расширяемость. NET Mono Project, www. mono-project. com Реализация среды исполнения IL для Linux и Расширяемость. NET Mono Project, www. mono-project. com Реализация среды исполнения IL для Linux и Mac OS X

Кросс-платформенность Кросс-платформенность

Кросс-платформенность Кросс-платформенность

Кросс-платформенность Кросс-платформенность

Кросс-платформенность Кросс-платформенность

Расширяемость. NET Mono Project, www. mono-project. com Реализация среды исполнения IL для Windows и Расширяемость. NET Mono Project, www. mono-project. com Реализация среды исполнения IL для Windows и Linux Реализация абсолютно полноценная (в т. ч. кроссплатформенный GUI)

Расширяемость. NET Mono Project, www. mono-project. com Реализация среды исполнения IL для Windows и Расширяемость. NET Mono Project, www. mono-project. com Реализация среды исполнения IL для Windows и Linux Руководитель разработки – Miguel de Icaza, создатель Gnome и Midnight Commander

Еще немного полезностей Существует диалект С++, компилируемый в IL: C++/CLI Программу на C# можно Еще немного полезностей Существует диалект С++, компилируемый в IL: C++/CLI Программу на C# можно собрать в форме DLL и пользоваться ей, как обычной библиотекой А можно и наоборот: подключать нативные DLL к программам на C#

И еще немного терминологии Код, переводимый в IL и выполняемый CLR – managed code, И еще немного терминологии Код, переводимый в IL и выполняемый CLR – managed code, управляемый код Нативный код (например, вызываемый из внешних DLL) – unmanaged code

Ок, а в чем писать-то? 1. Microsoft Visual Studio Рекомендуется подавать с плагином Resharper Ок, а в чем писать-то? 1. Microsoft Visual Studio Рекомендуется подавать с плагином Resharper http: //jetbrains. com/resharper 2. Mono Develop Работает в Linux и Mac OS X 3. Вызов компилятора из командной строки: csc. exe csc /out: My. exe File. cs google: csc. exe

В следующей серии • Синтаксис C# и типичные конструкции языка • Понятие ссылки, или В следующей серии • Синтаксис C# и типичные конструкции языка • Понятие ссылки, или куда делись указатели? • Reference vs. value types