.net — вопросы с ответами

.NET – это фреймворк для разработки программного обеспечения и экосистема, разработанная и поддерживаемая Microsoft для упрощения разработки десктопных и веб-приложений. Это популярная бесплатная платформа, которая в настоящее время используется для множества различных типов приложений, поскольку она обеспечивает среду программирования для большинства этапов разработки программного обеспечения. .NET лучше всего подходит для компаний, которых интересует широкий спектр функций, таких как веб-сервисы, программное обеспечение для настольных ПК и поддержка облачной инфраструктуры.

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

Основы

Для обеспечения работы в своей среде программирования Microsoft выпустили Windows Forms. Это библиотека классов графического интерфейса в .NET Framework. Windows Forms используются для разработки настольных приложений с богатой графикой, которую легко обновлять и развертывать.

.NET Core

.NET Core был выпущен в 2016 году. Это кросс-платформенная переработка .NET Framework. В отличие от старой версии, инженеры теперь могли использовать данный фреймворк в Linux и OS X для создания приложений, которые не обязательно связаны с семейством Windows. Новая система направлена на завоевание облачного пространства, поскольку некоторые провайдеры, такие как Digital Ocean, работают под управлением Linux. Мало того, что .NET Core является кроссплатформенным, его разные версии могут быть установлены параллельно на одном устройстве. .NET Core включает в себя ASP.NET Core и универсальную платформу Windows (UWP).

Универсальная платформа Windows (UWP) – это API, созданный Microsoft и используемый для разработки универсальных приложений, которые работают на всех совместимых устройствах Microsoft Windows, т.е. Windows, Windows Phone и HoloLens.

ASP.NET Core – это переработанная версия ASP.NET, которая получила более модульную структуру по сравнению с ее предшественником. ASP.NET Core позволяет создавать мобильные приложения, веб-приложения и сервисы. Он также кроссплатформенный и работает на OS X, Windows и Linux.

Xamarin

Третьим компонентом называется Xamarin, который используется для мобильных приложений и продуктов Mac. Первоначально Xamarin разрабатывался независимо от Microsoft и был проприетарным продуктом до тех пор, пока Microsoft не приобрела его в 2016 году, создав полностью открытую ветвь платформы .NET. Xamarin использует среду выполнения Mono и версию .NET Framework, настроенную для работы с API для iOS, Android и Xamarin.Mac. Все среды выполнения используют общую инфраструктуру, которая обеспечивает работу всей экосистемы.

.NET Standard

.NET Standard – это спецификация всех API, которые должна реализовывать платформа .NET, чтобы называться платформой .NET. Сам стандарт .NET Standard имеет открытый исходный код, и вы можете узнать о всех его различных версиях и API на GitHub.

.NET Standard 2.0 - это новая версия, которая значительно увеличила количество API по сравнению с предыдущей версией (1.6.1).

Теперь важно понять, что большинство из этих API не совсем новые. Большинство из них вы уже знаете из .NET Framework. Новым же является то, что теперь они стали частью стандарта, а это означает, что все платформы .NET должны будут реализовывать эти API. Это незаметное изменения для .NET Framework и Xamarin (который основан на Mono), поскольку у них уже есть эти API. Но в .NET Core необходимо было заново реализовать множество из этих API, чтобы быть совместимым с новой версией .NET Standard. К счастью, вся необходимая работа также была завершена, а ее результатом стал .NET Core 2.0.

Важно: платформа разработки .NET лучше всего подходит для интеграции с Visual Studio IDE, используемой для создания, отладки и публикации приложений на всех платформах и устройствах.

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

Плюсы .NET разработки

Объектно-ориентированная модель разработки программного обеспечения

.NET основан на объектно-ориентированном программировании (ООП). ООП – это модель разработки с идеей разбить программное обеспечение на более мелкие части, которыми проще управлять и объединять. ООП разделяет данные на объекты, то есть поля данных, и описывает поведение и содержимое объектов посредством объявления классов.

Модульная структура помогает определить поведение объектов и их взаимодействие без управления внутренними атрибутами объекта. ООП упрощает программирование, делая код управляемым, более подходящим для проведения тестирований и реагирования на повторяющиеся проблемы. Это также устраняет необходимость ненужного программирования и, как правило, означает меньше написанного кода для разработчиков. .NET позволяет повторно использовать код и компоненты, экономить время и стоимость разработки.

Надежная и простая система кеширования

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

Система кэширования в .NET является надежной и простой в использовании. Она также разрабатывалась, чтобы быть расширяемой. Класс Object Cache позволяет разработчикам создавать собственную реализацию кэша, которая будет использоваться для повышения производительности и масштабируемости клиентских и серверных приложений Windows.

Гибкость и простота обслуживания

Одна из важных функций .NET Core является гибкое развертывание. Оно может быть установлено как часть вашего приложения или требовать отдельной установки. Модульная конструкция позволяет включать все необходимые компоненты в зависимости от конкретных нужд проекта. Само развертывание так же просто осуществить, как скопировать папки.

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

Кроссплатформенный дизайн и языковая независимость .NET Core

.NET Core – это кроссплатформенная реализация .NET, позволяющая запускать код в OS X, Windows и Linux. В отличие от оригинальной платформы .NET (которая открыта только частично) .NET Core имеет полностью открытый исходный код, который гарантирует, что большое сообщество специалистов сможет постоянно вносить вклад в разработку.

Если вы пишете на C#, F# или Visual Basic, ваш код будет работать в каждой из совместимых операционных систем. Это позволяет компаниям охватить самые разные платформы, находящиеся в экосистеме .NET. В то же время кроссплатформенный дизайн и независимость от языка гарантируют, что все сообщество .NET с большим пулом различных технических навыков поделится своим опытом. В настоящее время .NET поддерживает более 25 языков, самыми популярными из которых в данный момент являются:

  • C#
  • Visual Basic.NET
  • J#
  • Managed
  • C++
  • IronPython
  • IronRuby

Автоматический мониторинг в ASP.NET

ASP.NET имеет встроенный автоматический мониторинг. Веб-сервер Windows строго контролирует веб-страницы и приложения, которые на нем работают. В случае возникновения каких-либо проблем, таких как утечки памяти или бесконечные циклы, он немедленно о них предупреждает . Это позволяет напрямую корректировать такое поведение и создавать новые процессы. Мониторинг обеспечивает более высокую стабильность и прозрачность приложений .NET.

Недостатки .NET разработки

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

Ограниченная объектно-реляционная поддержка

Как мы упоминали выше, .NET использует модель языка объектно-ориентированного программирования (ООП). Эта модель основана на объектах, а не на «действиях»; и данных, а не на логике. Поддержка разработки прикладных программ, ориентированных на данные, в .NET Framework обеспечивается Entity Framework.

Entity – это объектно-реляционный картограф (ORM), который связывает объектно-ориентированную платформу .NET Framework и реляционные (SQL) базы данных. Некоторые инженеры считают, что Entity Framework недостаточно гибок и может не поддерживать все доступные структуры баз данных. Это также означает, что существует вероятность того, что в какой-то момент Entity Framework может не поддерживать новые проекты баз данных. Другая проблема заключается в том, что в конечном итоге Microsoft может отказаться от этой инфраструктуры, что заставит вас использовать новые технологии, предлагаемые поставщиком.

Блокировка поставщика

Второй недостаток частично связан с предыдущим. .NET выпущена и основана Microsoft. Хотя .NET Core и Xamarin имеют открытый исходный код, вся экосистема далека от управления сообществом. Это означает, что все ваши продукты по-прежнему зависят от поставщика и решений, принятых Microsoft.

Стоимость лицензирования

Создание приложений в .NET – далеко не самое дешевое занятие, несмотря на технологию с открытым исходным кодом. В основном ваши расходы будут потрачены на Visual Studio IDE и другие дополнительные службы совместной работы и обеспечения качества, которые Microsoft предлагает для упрощения вашей работы. На сегодняшний день базовая версия Visual Studio будет стоить вам 539 долларов в год на одного инженера. Корпоративная версия, которая включает в себя различные облачные технологии, мобильность предприятия, функции обеспечения качества и многое другое, будет стоить около 3000 долларов в год. Тем не менее, вы все равно можете попытаться стать партнером Microsoft, чтобы получить ряд бесплатных подписок. Для некоммерческих и образовательных целей существует также бесплатное сообщество Visual Studio.

5 ответов
Я написал некоторый код для проверки влияния try-catch, но увидев некоторые неожиданные результаты. static void Main(string[] args) { Thread.CurrentThread.Priority = ThreadPriority.Highest; Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.RealTime; long start = 0, stop =...
try-catch
performance-testing
clr
19 янв. 2012, в 13:41
34 ответа
У меня есть код и когда он выполняется, он выдает NullReferenceException, говоря: Ссылка на объект не установлена ​​в экземпляр объекта. Что это значит и что я могу сделать, чтобы исправить эту ошибку?
null
nullreferenceexception
11 янв. 2011, в 17:29
87 ответов
Настольное приложение С# в экспресс-версии. Затем работала не 5 секунд спустя. Я попробовал следующее. Убедитесь, что на всех сборках установлены настройки отладки, флаг отладки и полная информация об отладке. Удалите все папки bin и obj и все DLL, связанные с проектом, со всей моей машины. Воссо...
visual-studio
debugging
breakpoints
28 янв. 2010, в 16:03
46 ответов
Каков самый простой способ обновить Label из другого потока? У меня есть Form на thread1, и из этого я запускаю другой поток (thread2). Хотя thread2 обрабатывает некоторые файлы, я хотел бы обновить Label в Form с текущим статусом работы thread2. Как я могу это сделать?...
multithreading
winforms
user-interface
19 март 2009, в 08:38
18 ответов
Я знаю из чтения документации MSDN, что "основное" использование интерфейса IDisposable - очистка неуправляемых ресурсов. Для меня "неуправляемый" означает такие вещи, как соединения с базой данных, сокеты, дескрипторы окон и т.д. Но я видел код, в котором метод Dispose() реализован для освобождения...
garbage-collection
idisposable
11 фев. 2009, в 18:06
38 ответов
Как преобразовать string в byte[] в .NET(С#) без указания конкретной кодировки вручную? Я собираюсь зашифровать строку. Я могу зашифровать его без преобразования, но мне все равно хотелось бы знать, почему здесь начинается кодирование. Кроме того, почему кодирование должно учитываться? Не могу ли я ...
string
character-encoding
23 янв. 2009, в 13:49
10 ответов
Каковы правильные номера версий для С#? Что вышло, когда? Почему я не могу найти ответы на вопрос о С# 3.5? Этот вопрос прежде всего помогает тем, кто ищет ответ, используя неправильный номер версии, например С# 3.5. Надежда состоит в том, что любой, кто не найдет ответ с неправильным номером верс...
visual-studio
.net-framework-version
29 окт. 2008, в 16:51
42 ответа
Как создать таблицу Excel с помощью С#, не требуя установки Excel на компьютере с кодом?
excel
file-io
29 сен. 2008, в 21:47
29 ответов
Не рекомендуется просто ловить System.Exception. Вместо этого следует поймать только "известные" исключения. Теперь это иногда приводит к ненужному повторяющемуся коду, например: try { WebId = new Guid(queryString["web"]); } catch (FormatException) { WebId = Guid.Empty; } catch (OverflowExce...
exception
exception-handling
25 сен. 2008, в 21:11
10 ответов
Я запускал StyleCop над кодом С#, и он продолжает сообщать, что мои директивы using должны находиться внутри пространства имен. Есть ли техническая причина для размещения директив using внутри, а не вне пространства имен?
namespaces
code-organization
stylecop
24 сен. 2008, в 03:24
26 ответов
Как вы можете перечислить enum в С#? например. следующий код не компилируется: public enum Suit { Spades, Hearts, Clubs, Diamonds } public void EnumerateAllSuitsDemoMethod() { foreach (Suit suit in Suit) { DoSomething(suit); } } И дает следующую ошибку времен...
enums
enumeration
19 сен. 2008, в 20:42
39 ответов
Я хочу сделать что-то вроде: MyObject myObj = GetMyObj(); // Create and fill a new object MyObject newObj = myObj.Clone(); И затем внесите изменения в новый объект, который не отражен в исходном объекте. Мне не часто нужна эта функциональность, поэтому, когда это было необходимо, я прибегал к созда...
clone
17 сен. 2008, в 00:53
11 ответов
Невозможно найти что-либо релевантное для Entity Framework/MySQL в Google, поэтому я надеюсь, что кто-то знает об этом.
entity-framework
ado.net
16 сен. 2008, в 19:49
64 ответа
Пример (обратите внимание на случай): string s = "Hello world!"; String s = "Hello world!"; Каковы рекомендации по использованию каждого из них? И в чем отличия?
string
types
alias
10 авг. 2008, в 08:20
64 ответа
Учитывая DateTime, представляющий день рождения человека, как я могу рассчитать их возраст в годах?
datetime
31 июль 2008, в 23:01
Наверх
Меню