- .NET Documentation
- Jeffrey Richter, CLR Via C# (4th edition)
- Jon Skeet, C# in Depth
- Andrew Troelsen, C# 6.0 and the .NET 4.6 Framework (Самый низкий порог вхождения в изучение C#)
- Сергей Тепляков, Набор доступных статей про принципам проектирования, книга "Паттерны проектирования на платформе .NET"
- Высокоуровневый ооп язык
- Строгая типизация
- Автоматическое управление памятью
Плюсы:
- Синтаксис и возможности
- Быстрое развитие
- IDE
- Высокая производительность по сравнению с динамически-типизированными языками
- Отсутствие проблем с версиями (DLL хелл)
Минусы:
- До .NET Core сильнейшая привязка к Windows
- Бардак с большим количеством фреймворков, которые живут одновременно
- Высочайшая скорость разработки новых фреймворков
- ServerSide
- GameDev (Unity, ServerSide, etc)
- UWP / WPF / WinForms Application
Код собирается компилятором языков (Roslyn) в промежуточный байт-код CIL (Common Intermediate Language), который именуется сборкой (assembly). У Roslyn есть собственное API:
Пример кода CIL языка (IL), который получается:
.class public Foo
{
.method public static int32 Add(int32, int32) cil managed
{
.maxstack 2
ldarg.0 // load the first argument;
ldarg.1 // load the second argument;
add // add them;
ret // return the result;
}
}
int r = Foo.Add(2, 3); // 5
In CIL:
ldc.i4.2
ldc.i4.3
call int32 Foo::Add(int32, int32)
stloc.0
.class public Car
{
.method public specialname rtspecialname instance void .ctor(int32, int32) cil managed
{
/* Constructor */
}
.method public void Move(int32) cil managed
{
/* Omitting implementation */
}
.method public void TurnRight() cil managed
{
/* Omitting implementation */
}
}
Microsoft заложила возможность мультиплатформенности - стандарт CLI (Common Language Infrastructure), но по факту получился windows-only.
Сейчас область применения .NET Framework постепенно сужается. Он уходит из бэкенда, но остается в windows-desktop, gamedev
CLR - исполняющая среда для выполнения CIL. JIT компилятор - часть CLR.
.Net совместимые языки: C#, F#, C++/CLI (legacy name "Managed C++"), VB.Net
Managed Code - код, который может запускаться только из-под CLR/Mono/etc
Stroustrup: "On the difficult and controversial question of what the CLI binding/extensions to C++ is to be called, I prefer C++/CLI as a shorthand for "The CLI extensions to ISO C++". Keeping C++ as part of the name reminds people what is the base language and will help keep C++ a proper subset of C++ with the C++/CLI extensions."
C# | C# 1.0 | C# 2.0 | C# 3.0 | C# 4.0 | C# 5.0 | C# 6.0 | C# 7.0 |
---|---|---|---|---|---|---|---|
.NET Framework | 1.0/1.1 | 2.0 | 3.0/3.5 | 4.0 | 4.5 | 4.5/4.6 | 4.5-4.7 |
Visual Studio | 2002 | 2005 | 2008 | 2010 | 2012/13 | 2013/2015 | 2017 |
Net Core | - | - | - | - | - | 1.0 | 1.1/2.0 |
Features | Basic | Generics Partial Nullable Properties Static Delegates | AnonTypes Extensions QueryExp Lambda | dynamic OptionalArgs Generic covariance | Async | C# 6.0 New | C# 7.0 New |
- .NET Framework Guide
- .NET Core Roadmap & Supported Platforms
- C#7.0 with .Net Framework 4.0/4.5
- StackOverflow C# Versions
Платформа для разработки:
- Кроcсплатформенная
- Все CLI комманды могут быть реализованы через командную строку command-line interface (CLI) tools
- OpenSource: MIT + Apache2.0
CLR -> CoreCLR, включает новый JIT компилятор RyuJIT, GC, etc
FCL -> .NET Core Libraries (CoreFx): System.Collections, System.IO, System.Xml, etc
- Удалили много лишнего (WebForms, WinForms, WPF, WCF, EF) по сравнению с .NET Framework, сделали код OpenSource, ускорили.
- Отдельные классы из старого фреймворка выложили отдельными нагетами.
MS не стремится сделать вес фреймворка меньше, а хочет, чтобы не было лишних зависимостей
- .NET Framework 4.6 - 200 MB
- .NET Core 1.0 - 11 MB / .NET Core 2.0 - 112 MB
Портировали MSBuild на .NET Core и добавили в него новые методы.
Базовые CLI команды:
- new
- restore
- run
- build
- publish
- test
- pack
Примеры вызова через командную строку:
dotnet restore
dotnet <command> --help
dotnet publish -o pub -c Release
Microsoft управляет несколькими .NET фреймворками: .NET Framework, .NET Core, Xamarin, etc. При этом ядро фреймворков начало расходиться и нужно было реализовать возможность писать портируемый код между платформами.
Придумали .NET Standard. Сам по себе он не содержит реализации.
Это список типов и интерфейсов, которые он требует для реализации тех, кто хочет его поддерживать.
.NET Standard расширяется и новые ветки фреймворков реализуют у себя его требования и поддерживают все более и более широкую его версию.
.NET Standard позволяет создавать библитеку, которую можно использовать в разных фреймворках.
Технология компиляции в нативный код ahead-of-time. Раньше для этого использовался ngen, но у них есть существенные отличия (не использует CLR и JIT вообще, вместо него обрезанный, отрефакторенный runtime).
Ускоряет первый запуск программы.
Проблемы с рефлекшеном: все машинные коды должны быть сгенерированы заранее, эвристика компилятора не может угадать все возможные сценарии метапрограммирования.
Не работает в .net core 2.0.
- Visual Studio 2017 + Resharper
- Visual Studio Code
- Visual Studio for Mac (до этого - Xamarin)
- JetBrains Rider
- MonoDevelop, SharpDevelop, etc
- LINQPad - для тестирования и быстрой отладки
Установка Visual Studio отличается красивым выбором Workloads:
Visual Studio Code
LINQPad 5
Система публикации сборок.
В Visual Studio:
- Tools -> Nuget Package Manager
- Right click на проекте -> Manage Nuget Packages
Добавление reference:
Настройки nuget: