Перейти к содержимому

Net и c в чем разница

  • автор:

Введение в C#

На сегодняшний момент язык программирования C# один из самых мощных, быстро развивающихся и востребованных языков в ИТ-отрасли. В настоящий момент на нем пишутся самые различные приложения: от небольших десктопных программок до крупных веб-порталов и веб-сервисов, обслуживающих ежедневно миллионы пользователей.

C# уже не молодой язык и как и вся платформа .NET уже прошел большой путь. Первая версия языка вышла вместе с релизом Microsoft Visual Studio .NET в феврале 2002 года. Текущей версией языка является версия C# 12, которая вышла 14 ноября 2023 года вместе с релизом .NET 8.

C# является языком с Си-подобным синтаксисом и близок в этом отношении к C++ и Java. Поэтому, если вы знакомы с одним из этих языков, то овладеть C# будет легче.

C# является объектно-ориентированным и в этом плане много перенял у Java и С++. Например, C# поддерживает полиморфизм, наследование, перегрузку операторов, статическую типизацию. Объектно-ориентированный подход позволяет решить задачи по построению крупных, но в тоже время гибких, масштабируемых и расширяемых приложений. И C# продолжает активно развиваться, и с каждой новой версией появляется все больше интересных функциональностей.

Роль платформы .NET

Когда говорят C#, нередко имеют в виду технологии платформы .NET (Windows Forms, WPF, ASP.NET, .NET MAUI). И, наоборот, когда говорят .NET, нередко имеют в виду C#. Однако, хотя эти понятия связаны, отождествлять их неверно. Язык C# был создан специально для работы с фреймворком .NET, однако само понятие .NET несколько шире.

Как-то Билл Гейтс сказал, что платформа .NET — это лучшее, что создала компания Microsoft. Возможно, он был прав. Фреймворк .NET представляет мощную платформу для создания приложений. Можно выделить следующие ее основные черты:

  • Поддержка нескольких языков . Основой платформы является общеязыковая среда исполнения Common Language Runtime (CLR), благодаря чему .NET поддерживает несколько языков: наряду с C# это также VB.NET, C++, F#, а также различные диалекты других языков, привязанные к .NET, например, Delphi.NET. При компиляции код на любом из этих языков компилируется в сборку на общем языке CIL (Common Intermediate Language) — своего рода ассемблер платформы .NET. Поэтому при определенных условиях мы можем сделать отдельные модули одного приложения на отдельных языках.
  • Кроссплатформенность . .NET является переносимой платформой (с некоторыми ограничениями). Например, последняя версия платформы на данный момент — .NET 8 поддерживается на большинстве современных ОС Windows, MacOS, Linux. Используя различные технологии на платформе .NET, можно разрабатывать приложения на языке C# для самых разных платформ — Windows, MacOS, Linux, Android, iOS, Tizen.
  • Мощная библиотека классов . .NET представляет единую для всех поддерживаемых языков библиотеку классов. И какое бы приложение мы не собирались писать на C# — текстовый редактор, чат или сложный веб-сайт — так или иначе мы задействуем библиотеку классов .NET.
  • Разнообразие технологий . Общеязыковая среда исполнения CLR и базовая библиотека классов являются основой для целого стека технологий, которые разработчики могут задействовать при построении тех или иных приложений. Например, для работы с базами данных в этом стеке технологий предназначена технология ADO.NET и Entity Framework Core. Для построения графических приложений с богатым насыщенным интерфейсом — технология WPF и WinUI, для создания более простых графических приложений — Windows Forms. Для разработки кроссплатформенных мобильных и десктопных приложений — Xamarin/MAUI. Для создания веб-сайтов и веб-приложений — ASP.NET и т.д. К этому стоит добавить активной развивающийся и набирающий популяность Blazor — фреймворк, который работает поверх .NET и который позволяет создавать веб-приложения как на стороне сервера, так и на стороне клиента. А в будущем будет поддерживать создание мобильных приложений и, возможно, десктоп-приложений.
  • Производительность . Согласно ряду тестов веб-приложения на .NET в ряде категорий сильно опережают веб-приложения, построенные с помощью других технологий. Приложения на .NET в принципе отличаются высокой производительностью.

Также еще следует отметить такую особенность языка C# и фреймворка .NET, как автоматическая сборка мусора. А это значит, что нам в большинстве случаев не придется, в отличие от С++, заботиться об освобождении памяти. Вышеупомянутая общеязыковая среда CLR сама вызовет сборщик мусора и очистит память.

.NET Framework и .NET 8

Стоит отметить, что .NET долгое время развивался премущественно как платформа для Windows под названием .NET Framework. В 2019 вышла последняя версия этой платформы — .NET Framework 4.8. Она больше не развивается

С 2014 Microsoft стал развивать альтернативную платформу — .NET Core, которая уже предназначалась для разных платформ и должна была вобрать в себя все возможности устаревшего .NET Framework и добавить новую функциональность. Затем Microsoft последовательно выпустил ряд версий этой платформы: .NET Core 1, .NET Core 2, .NET Core 3, .NET 5. И текущей версией является расматриваемая в этом руководстве платформа .NET 8. Поэтому следует различать .NET Framework, который предназначен преимущественно для Windows, и кросплатформенный .NET 8. В данном руководстве речь будет идти о C# 12 в связке с .NET 8, поскольку это актуальная платформа.

Управляемый и неуправляемый код

Нередко приложение, созданное на C#, называют управляемым кодом (managed code). Что это значит? А это значит, что данное приложение создано на основе платформы .NET и поэтому управляется общеязыковой средой CLR, которая загружает приложение и при необходимости очищает память. Но есть также приложения, например, созданные на языке С++, которые компилируются не в общий язык CIL, как C#, VB.NET или F#, а в обычный машинный код. В этом случае .NET не управляет приложением.

В то же время платформа .NET предоставляет возможности для взаимодействия с неуправляемым кодом..

JIT-компиляция

Как выше писалось, код на C# компилируется в приложения или сборки с расширениями exe или dll на языке CIL. Далее при запуске на выполнение подобного приложения происходит JIT-компиляция (Just-In-Time) в машинный код, который затем выполняется. При этом, поскольку наше приложение может быть большим и содержать кучу инструкций, в текущий момент времени будет компилироваться лишь та часть приложения, к которой непосредственно идет обращение. Если мы обратимся к другой части кода, то она будет скомпилирована из CIL в машинный код. При том уже скомпилированная часть приложения сохраняется до завершения работы программы. В итоге это повышает производительность.

По сути это все, что вкратце надо знать о платформе .NET и языке C#. А теперь создадим первое приложение.

В чем разница .NET и C#?

В чем разница .NET и C#?
Это одно и то же или всё-таки разные вещи?

  • Вопрос задан более трёх лет назад
  • 3415 просмотров

1 комментарий

Оценить 1 комментарий

Saboteur @saboteur_kiev

под .net можно писать не только на C#

Решения вопроса 1

ArXen42

.NET — платформа, в частности включает в себя CLR, CLS и FCL. C# — один из языков, компилируемых в IL код под эту самую CLR. Также существует альтернативная реализация некоторой части .NET (в т.ч. компиляторы некоторых языков и сама среда исполнения) — Mono.
P.S. надо же, запомнил наконец эти аббревиатуры.

Ответ написан более трёх лет назад

Нравится 5 1 комментарий

В чем разница между C# и .NET?

Фотография

Меня интересует конкретно связанное с тестированием. Я спрашивал у себя в университете, но дать точного различия мне не смогли ( а я в программировании очень слабо что понимаю и поэтому информацию из статей в интернете которые копи-пастят друг друга трудно понять). Хотелось бы услышать ваше мнение, но прошу вас описывать по-простому. т.к. хочу понять и разобраться.

Даже такой вопрос былу меня к тестировщику: «Какие языки ты сипользуешь для автоматизации»? Ответил что .NET и JAva. После я спросил что C# и .NET это тоже самое? И он ответил что «нет», но рассказать в чем разница так и не смог

#2 Little_CJIOH

Little_CJIOH

Отправлено 22 июня 2018 — 13:27

C# — Язык программирования.
.Net — программная платформа. Среда, в которой исполняется программа.

Относятся друг к другу так-же как Java к JVM

#3 Freiman

Отправлено 22 июня 2018 — 13:34

Относятся друг к другу так-же как Java к JVM

Объяснил! 🙂 Следующий вопрос — «в чем разница между Java и JVM»

#4 KnopkaZapuska

KnopkaZapuska

Отправлено 22 июня 2018 — 13:36

C# — Язык программирования.
.Net — программная платформа. Среда, в которой исполняется программа.

Относятся друг к другу так-же как Java к JVM

Хорошо, тогда чем отличется .Net от Visual Studio? И там и там платформа
Или вы хотели сказать что C# это язык который работает на платформе .Net и его можно писать в программе Visual Studio и других?

#5 Little_CJIOH

Little_CJIOH

Отправлено 22 июня 2018 — 13:38

Ну, я несколько больше написал.

Кстати, что это за университет? Страна должна знать своих героев.

#6 Little_CJIOH

Little_CJIOH

Отправлено 22 июня 2018 — 13:46

C# — Язык программирования.
.Net — программная платформа. Среда, в которой исполняется программа.

Относятся друг к другу так-же как Java к JVM

Хорошо, тогда чем отличется .Net от Visual Studio? И там и там платформа
Или вы хотели сказать что C# это язык который работает на платформе .Net и его можно писать в программе Visual Studio и других?

Visual Studio — Это среда разработки.
Вы в среде разработки пишете программу, которая будет исполняться в некоей среде исполнения.
Visual Studio — C# — .Net
Intelij Idea — Java — JVM
PyCharm — Python — интерпретатор Python

#7 Spock

Отправлено 22 июня 2018 — 13:52

можно и не только на сишарпе писать программы, чтобы на дотнете их выполнять

Visual Basic -> .NET

#8 KnopkaZapuska

KnopkaZapuska

Отправлено 22 июня 2018 — 13:53

C# — Язык программирования.
.Net — программная платформа. Среда, в которой исполняется программа.

Относятся друг к другу так-же как Java к JVM

Хорошо, тогда чем отличется .Net от Visual Studio? И там и там платформа
Или вы хотели сказать что C# это язык который работает на платформе .Net и его можно писать в программе Visual Studio и других?

Visual Studio — Это среда разработки.
Вы в среде разработки пишете программу, которая будет исполняться в некоей среде исполнения.
Visual Studio — C# — .Net
Intelij Idea — Java — JVM
PyCharm — Python — интерпретатор Python

Надеюсь что последний вопрос. Так зачем в итоге нам нужны .Net, JVM? Если простым язык. Можно их назвать «плагины’ или «расширения» или как я знаю в программировании это называется «библиотеки»?

#9 Little_CJIOH

Little_CJIOH

Отправлено 22 июня 2018 — 14:49

C# — Язык программирования.
.Net — программная платформа. Среда, в которой исполняется программа.

Относятся друг к другу так-же как Java к JVM

Хорошо, тогда чем отличется .Net от Visual Studio? И там и там платформа
Или вы хотели сказать что C# это язык который работает на платформе .Net и его можно писать в программе Visual Studio и других?

Visual Studio — Это среда разработки.
Вы в среде разработки пишете программу, которая будет исполняться в некоей среде исполнения.
Visual Studio — C# — .Net
Intelij Idea — Java — JVM
PyCharm — Python — интерпретатор Python

Надеюсь что последний вопрос. Так зачем в итоге нам нужны .Net, JVM? Если простым язык. Можно их назвать «плагины’ или «расширения» или как я знаю в программировании это называется «библиотеки»?

как выше уже было сказано, это среда исполнения. И нужна она для исполнения программы. Без среды исполнения программа — бесполезный набор символов/байтиков.

Есть еще хорошее слово интерпретатор.
.Net интерпретирует CIL (MSIL), в который компилируется C#, VB, C++ и еще некоторые языки
JVM интерпретирует Java байт-код, в который компилируются Java, Scala и другие подобные языки.

Параллелизм, многопоточность, асинхронность: разница и примеры применения (.NET, C#)

Давайте разберёмся, сколько программных моделей используют C#-разработчики и в чём их отличия. Особенности каждой модели рассмотрим подробно.

Тимур Гайфулин
Руководитель группы разработки digital-интегратора DD Planet

Многие начинающие специалисты путают многопоточное, асинхронное и параллельное программирование. На первый взгляд, может показаться, что это одно и то же — но нет. Давайте разберёмся, сколько программных моделей используют C#-разработчики и в чём их отличия. Материал подготовлен совместно с Алексеем Гришиным, ведущим разработчиком DD Planet.

Существует несколько концепций: синхронное/асинхронное программирование и однопоточные/многопоточные приложения. Причём первая программная модель может работать в однопоточной или многопоточной среде. То есть приложение может быть: синхронным однопоточным, синхронным многопоточным и асинхронным многопоточным.

Отдельной концепцией считается параллелизм, который является подмножеством многопоточного типа приложений. Рассмотрим особенности каждой программной модели подробнее.

Синхронная модель

Потоку назначается одна задача, и начинается её выполнение. Заняться следующей задачей можно только тогда, когда завершится выполнение первой. Эта модель не предполагает приостановку одной задачи, чтобы выполнить другую.

Однопоточность

Система в одном потоке работает со всеми задачами, выполняя их поочерёдно.

Параллелизм, многопоточность, асинхронность: разница и примеры применения (.NET, C#) 1

Однопоточная синхронная система[/caption]

Многопоточность

В этом случае речь о нескольких потоках, в которых выполнение задач идет одновременно и независимо друг от друга.

Параллелизм, многопоточность, асинхронность: разница и примеры применения (.NET, C#) 2

Многопоточная синхронная система[/caption]

Пример такого концепта — одновременная разработка веб- и мобильного приложений и серверной части, при условии соблюдения архитектурных «контрактов».

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

Асинхронность

Характеристики асинхронного кода:

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

Если у системы много потоков, то их асинхронная работа выглядит примерно так:

Параллелизм, многопоточность, асинхронность: разница и примеры применения (.NET, C#) 3

Многопоточная асинхронная система[/caption]

Конструкция async/await

Для работы с асинхронными вызовами в C# необходимы два ключевых слова:

  • async — используется в заголовке метода;
  • await — вызывающий метод содержит одно или несколько таких выражений.

Они используются вместе для создания асинхронного метода. У асинхронных методов могут быть следующие типы возвращаемых значений:

  1. Task для асинхронного метода, который выполняет операцию, но не возвращает значение;
  2. Task для асинхронного метода, возвращающего значение;
  3. void для обработчика событий;
  4. начиная с версии 7.0 в языке C# поддерживаются любые типы с доступным методом GetAwaiter;
  5. начиная с версии 8.0 в языке C# поддерживается интерфейс IAsyncEnumerable для асинхронного метода, который возвращает асинхронный поток.

Сама конструкция async/await появилась в C# 5.0 с выходом .NET Framework 4.5 и отчасти представляет собой синтаксический сахар. Механизм async/await не имеет реализации в CLR и разворачивается компилятором в сложную конструкцию на IL. Но эта конструкция — не сахар вокруг тасок, а отдельный механизм, использующий класс Task для переноса состояния исполняемой части кода.

Пример асинхронного метода:

using System; using System.Threading; using System.Threading.Tasks; namespace FactorialApp < class Program < static void Factorial() < int result = 1; for (int i = 1; i Thread.Sleep(8000); Console.WriteLine($"Факториал равен "); > // определение асинхронного метода static async void FactorialAsync() < Console.WriteLine("Начало метода FactorialAsync"); // выполняется синхронно await Task.Run(() =>Factorial()); // выполняется асинхронно Console.WriteLine("Конец метода FactorialAsync"); > static void Main(string[] args) < FactorialAsync(); // вызов асинхронного метода Console.WriteLine("Введите число: "); int n = Int32.Parse(Console.ReadLine()); Console.WriteLine($"Квадрат числа равен "); Console.Read(); > > > 

Параллелизм, многопоточность, асинхронность: разница и примеры применения (.NET, C#) 4

Результат асинхронного вычисления факториала[/caption]

Этот пример приведён лишь для наглядности, особого смысла делать логику вычисления факториала асинхронной нет. Опять же, для имитации долгой работы мы использовали задержку на 8 секунд с помощью методы Thread.Sleep(). Цель была показать: асинхронная задача, которая может выполняться долгое время, не блокирует основной поток — в этом случае метод Main(), и мы можем вводить и обрабатывать данные, продолжая работу с ним.

Параллелизм

Эта программная модель подразумевает, что задача разбивается на несколько независимых подзадач, которые можно выполнить параллельно, а затем объединить результаты. Примером такой задачи может быть Parallel LINQ:

IEnumerable yourData = GetYourData(); var result = yourData.AsParallel() // начинаем обрабатывать параллельно .Select(d => d.CalcAmount()) // Вычисляем параллельно .Where(amount => amount > 0) .ToArray(); // Возвращаемся к синхронной модели 

Параллелизм, многопоточность, асинхронность: разница и примеры применения (.NET, C#) 5

Обзор архитектуры параллельного программирования в .NET[/caption]

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

Однако не стоит забывать, что не все задачи поддаются распараллеливанию. Например, описанная выше задача по вычислению факториала, в которой на каждом последующем этапе нужен результат предыдущего.

Какую программную модель выбрать?

Перечисленные программные модели должны применяться в зависимости от задач. Их можно использовать как отдельно во всём приложении, так и сочетать между собой. Главное, чтобы приложение было максимально эффективным и удовлетворяло требования пользователя.

Если речь идет о сложных многопользовательских приложениях, то стремиться стоит к использованию асинхронной модели, так как важна интерактивность и отзывчивость интерфейса. Взаимодействие с пользователем в активном режиме всегда должно быть максимально эффективным, даже если в фоновом режиме в то же время выполняются другие задачи. Издержки асинхронности, например, на переключение исполняемого контекста, в таком случае нивелируются за счет общей эффективности приложения.

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

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

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