Слайд 5Язык 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”
Слайд 15Фишки языка
Рефлексия (reflection)
string s
= "test";
Type type = s.GetType();
string memberName =
type.GetMembers()[3].Name; // Join()"
Слайд 17Фишки языка
LINQ
int[] numbers = {5, 4, 1, 3, 9};
IEnumerable lowNums = from n in numbers
where n < 5
select n;
// {4, 1, 3}
Слайд 18Фишки языка
LINQ
int[] numbers = {5, 4, 1, 3, 9};
IEnumerable lowNums = from n in numbers
where n < 5
select n;
// lowNums содержит {4, 1, 3}
// Эквивалентно
lowNums = numbers.Where(n => n < 5);
Слайд 20Фишки языка
Делегаты: замена указателям на функции
delegate
int MyDelegate(int i);
int Square(int arg)
{
return arg * arg;
}
void MyMethod()
{
MyDelegate del = Square;
int res = del.Invoke(3);
int res2 = del(4);
}
Слайд 21Фишки языка
Автоматический вывод типа переменной
var dict = new Dictionary
List>();
// Вместо
Dictionary dict =
new Dictionary()
Слайд 22Фишки языка
Встроенная система исключений
Слайд 23Фишки языка
Богатая стандартная библиотека
Работа с высокоуровневыми сетевыми протоколами (XML, SMTP,
HTTP)
Криптография
Сериализация объектов
Работа с файловой системой
Работа с базами данных
…
Слайд 24Что еще умеет язык?
Консольные приложения
GUI: Windows Forms и WPF
Web development:
ASP.NET и ASP.NET MVC
Web&mobile apps: Silverlight
Слайд 25Что на нём пишут?
Enterprise (десктопные и серверные бизнес-приложения под ключ)
Web
development
Windows Phone
Слайд 26А что хорошего уже написано?
stackoverflow.com
C# 3.5, ASP.NET MVC, Windows Server
2008
google: stackoverflow architecture
MySpace
C# 2.0, ASP.NET
google: myspace architecture
Слайд 27Фишки языка
C# - JIT-компилируемый язык
Слайд 28JIT-компиляция
Компилируемые языки
Интерпретируемые языки
Слайд 29JIT-компиляция
Компилируемые языки
С, С++, Pascal
Исходный код переводится в машинные коды
Машинный код
исполняется процессором
Не запустится на другой процессорной архитектуре (а также на
другой ОС)
Слайд 30JIT-компиляция
Интерпретируемые языки
PHP, Perl, Python, Ruby, JavaScript
Исходный код исполняется интерпретатором
Запустится на
любой архитектуре и в любой ОС, был бы интерпретатор
Как правило,
медленнее компилируемых языков
Слайд 31JIT-компиляция
JIT-компилируемые языки
C#, Java
Исходный код компилируется в байт-код
Среда исполнения переводит байт-код
в машинный код для данного процессора
Как правило, не медленнее компилируемых
языков
Слайд 32JIT-компиляция
Важные моменты
Байткод не привязан к архитектуре и ОС (platform-agnostic)
Есть и
компилятор, есть и среда исполнения
Среда исполнения не интерпретирует байткод, а
целиком (или по крайней мере, большими порциями) переводит его в машинный код
Слайд 33JIT-компиляция
Важные моменты
Байткод, который генерит компилятор C# - intermediate language, IL
В
Windows скомпилированный IL-файл имеет расширение *.exe
Слайд 34JIT-компиляция
PE header
CLR metadata
IL bytecode
.NET executable
Слайд 35JIT-компиляция
Важные моменты
На клиентских машинах должен быть установлен .NET Framework
Начиная с
Windows XP SP2 он установлен по умолчанию
В Windows Vista, Windows
7 и во всех Windows Server он уже есть
Слайд 36Структура .NET Framework
Байт-код – intermediate language
Среда исполнения байт-кода – CLR,
Common Language Runtime
Помимо конвертации байт-кода CLR отвечает за:
Управление памятью
Создание и
управление исключениями (exceptions)
Управление потоками (threads)
Слайд 38Расширяемость .NET
Открытая спецификация C#
CLI, Common Language Infrastructure: открытая спецификация IL
и принципов работы среды исполнения IL
Слайд 39Расширяемость .NET
Любой желающий может написать компилятор любого языка в IL
Слайд 41Расширяемость .NET
Любой желающий может написать компилятор любого языка в IL
C#,
Visual Basic .NET, J#
Python, Ruby, Fortran, F#, Nemerle, Scala…
Слайд 42Расширяемость .NET
Полезный бонус:
Спецификация обязывает каждый .NET-совместимый язык реализовывать одну и
ту же базовую систему типов
CTS, Common Type System
Слайд 43Расширяемость .NET
Используете IronPython – имеете ту же систему базовых типов,
что и в C#
String, работа с массивами, threading...
Слайд 44Расширяемость .NET
Дальше – больше!
Можно написать свою реализацию CLR (среды исполнения
IL)
.NET Framework и Microsoft CLR – одна из реализаций CLI
Слайд 45Расширяемость .NET
Mono Project, www.mono-project.com
Реализация среды исполнения IL для Linux и
Mac OS X
Слайд 50Расширяемость .NET
Mono Project, www.mono-project.com
Реализация среды исполнения IL для Windows и
Linux
Реализация абсолютно полноценная (в т.ч. кроссплатформенный GUI)
Слайд 51Расширяемость .NET
Mono Project, www.mono-project.com
Реализация среды исполнения IL для Windows и
Linux
Руководитель разработки – Miguel de Icaza, создатель Gnome и Midnight
Commander
Слайд 52Еще немного полезностей
Существует диалект С++, компилируемый в IL: C++/CLI
Программу на
C# можно собрать в форме DLL и пользоваться ей, как
обычной библиотекой
А можно и наоборот: подключать нативные DLL к программам на C#
Слайд 53И еще немного терминологии
Код, переводимый в IL и выполняемый CLR
– managed code, управляемый код
Нативный код (например, вызываемый из внешних
DLL) – unmanaged code
Слайд 54Ок, а в чем писать-то?
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
Слайд 55В следующей серии
Синтаксис C# и типичные конструкции языка
Понятие ссылки, или
куда делись указатели?
Reference vs. value types