Skip to content

Latest commit

 

History

History
303 lines (199 loc) · 12.9 KB

01-net.md

File metadata and controls

303 lines (199 loc) · 12.9 KB

.Net

Литература

Использование и применение

  • Высокоуровневый ооп язык
  • Строгая типизация
  • Автоматическое управление памятью

Плюсы:

  • Синтаксис и возможности
  • Быстрое развитие
  • IDE
  • Высокая производительность по сравнению с динамически-типизированными языками
  • Отсутствие проблем с версиями (DLL хелл)

Минусы:

  • До .NET Core сильнейшая привязка к Windows
  • Бардак с большим количеством фреймворков, которые живут одновременно
  • Высочайшая скорость разработки новых фреймворков

Java vs C# Stackoverflow

Применение

  • ServerSide
  • GameDev (Unity, ServerSide, etc)
  • UWP / WPF / WinForms Application

.NET Framework

DotNet.svg

Код собирается компилятором языков (Roslyn) в промежуточный байт-код CIL (Common Intermediate Language), который именуется сборкой (assembly). У Roslyn есть собственное API:

Standard support

Пример кода 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

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 Core

Платформа для разработки:

  • Кро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

Command-line interface tools

Портировали MSBuild на .NET Core и добавили в него новые методы.

Базовые CLI команды:

  • new
  • restore
  • run
  • build
  • publish
  • test
  • pack

Примеры вызова через командную строку:

  • dotnet restore
  • dotnet <command> --help
  • dotnet publish -o pub -c Release

.NET Standard

Microsoft управляет несколькими .NET фреймворками: .NET Framework, .NET Core, Xamarin, etc. При этом ядро фреймворков начало расходиться и нужно было реализовать возможность писать портируемый код между платформами.

Придумали .NET Standard. Сам по себе он не содержит реализации.

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

.NET Standard расширяется и новые ветки фреймворков реализуют у себя его требования и поддерживают все более и более широкую его версию.

.NET Standard позволяет создавать библитеку, которую можно использовать в разных фреймворках.

Standard support

.NET Native

Технология компиляции в нативный код ahead-of-time. Раньше для этого использовался ngen, но у них есть существенные отличия (не использует CLR и JIT вообще, вместо него обрезанный, отрефакторенный runtime).

Ускоряет первый запуск программы.

Проблемы с рефлекшеном: все машинные коды должны быть сгенерированы заранее, эвристика компилятора не может угадать все возможные сценарии метапрограммирования.

Не работает в .net core 2.0.

IDE

Установка Visual Studio отличается красивым выбором Workloads: Workloads 1

Workloads 2

Visual Studio Code

Visual Studio Code

LINQPad 5

LINQPad

Nuget

Система публикации сборок.

Nuget Newtonsoft.Json

В Visual Studio:

  • Tools -> Nuget Package Manager
  • Right click на проекте -> Manage Nuget Packages

Добавление reference:

Nuget Newtonsoft.Json

Настройки nuget:

Nuget Newtonsoft.Json