Как среда выполнения Windows 8 (WinRT / Windows Store apps / Windows 10 Universal App) сравнивается с Silverlight и WPF? [закрытый]


Я пытаюсь получить мою голову вокруг новой среды выполнения Windows 8, который используется для создания метро приложения стиль. Я знаю, что вы можете использовать его с XAML и он основан на .NET так C# и VB.NET может использоваться для написания приложений, но тогда это, похоже, имеет какое-то отношение к HTML, CSS, DOM и JavaScript.

может ли кто-нибудь объяснить, что это такое в нескольких абзацах, в терминах, которые может понять программист .NET UI? (Мне не хватает чего-то "ключевого", что необходимо понять это.)


мы все знаем, что WPF,Silverlight, Windows Forms и т. д. будут работать под Windows 8 (и Windows 10), по крайней мере на Intel, поэтому, пожалуйста, не говори мне, что...

5 346

5 ответов:

на самом низком уровне WinRT-это объектная модель, определенная на уровне ABI. Он использует COM в качестве базы (поэтому каждый объект WinRT реализует IUnknown и делает refcounting), и строит оттуда. Он добавляет довольно много новых концепций по сравнению со старыми COM, большинство из которых поступают непосредственно из .NET - например, объектная модель WinRT имеет делегаты, а события выполняются в стиле .NET (с делегатами и методами добавления/удаления подписчика, по одному на событие), а не старая модель COM источников событий и событий. умывальники. Из других примечательных вещей WinRT также имеет параметризованные ("общие") интерфейсы.

еще одно большое изменение заключается в том, что все компоненты WinRT имеют метаданные, доступные для них, как и сборки .NET. В COM у вас вроде как было это с typelibs, но не каждый компонент COM имел их. Для WinRT, метаданные, содержащиеся в .файлы winmd-загляните внутрь "C:\Program файлы (x86)\Windows Kits\8.0\Windows Metadata\" в окне предварительного просмотра разработчика. Если вы осмотритесь, то увидите, что они на самом деле сборки CLI без кода, просто таблицы метаданных. Вы можете открыть их с помощью ILDASM, на самом деле. Обратите внимание, что это не означает, что WinRT сам управляется - он просто повторно использует формат файла.

тогда существует ряд библиотек, реализованных в терминах этой объектной модели, определяющей интерфейсы и классы WinRT. Опять же, посмотрите на папку "метаданные Windows", упомянутую выше, чтобы увидеть, что там; или просто запустите Object Browser в VS и выберите "Windows 8.0" в селекторе фреймворка, чтобы посмотрите, что покрыто. Там много чего есть, и это не касается только пользовательского интерфейса - вы также получаете пространства имен, такие как Windows.Data.Json или Windows.Graphics.Printing или Windows.Networking.Sockets.

затем вы получаете несколько библиотек, которые специально занимаются пользовательским интерфейсом-в основном это будут различные пространства имен под Windows.UI или Windows.UI.Xaml. Многие из них очень похожи на пространства имен WPF/Silverlight-например Windows.UI.Xaml.Controls близко соответствует System.Windows.Controls; то же самое для Windows.UI.Xaml.Documents etc.

теперь .NET имеет возможность напрямую ссылайтесь на компоненты WinRT, как если бы они были сборками .NET. Это работает иначе, взаимодействия с COM - вам не нужны никакие промежуточные артефакты, такие как сборки, вы просто /r a .файл winmd, а также все типы и их члены в его метаданных становятся видимыми для вас, как если бы они были объектами .NET. Обратите внимание, что сами библиотеки WinRT являются полностью родными (и поэтому родные программы C++, которые используют WinRT, вообще не требуют CLR) - магия для предоставления всего этого материала в качестве управляемого находится внутри CLR сам по себе, причем довольно низкого уровня. Если вы ildasm программа .NET, которая ссылается на a .winmd, вы увидите, что он на самом деле выглядит как ссылка на сборку extern - там нет ловкости рук, таких как встраивание типа.

это не тупое отображение, либо-CLR пытается адаптировать типы WinRT к их эквивалентам, где это возможно. Так, например, идентификаторы, даты и URI стать System.Guid,System.DateTime и System.Uri, соответственно; WinRT коллекции интерфейсов, таких как IIterable<T> и IVector<T> стань IEnumerable<T> и IList<T>; и так далее. Это происходит в обоих направлениях - если у вас есть объект .NET, который реализует IEnumerable<T>, и передайте его обратно в WinRT, он увидит его как IIterable<T>.

в конечном счете, это означает, что ваши приложения .NET Metro получают доступ к подмножеству существующих стандартных библиотек .NET, а также к (собственным) библиотекам WinRT, некоторые из которых - особенно Windows.UI - посмотрите очень похож на Silverlight, API-wise. У вас все еще есть XAML для определения пользовательского интерфейса, и вы все еще имеете дело с те же базовые понятия, как в Silverlight - привязки данных, ресурсы, стили, шаблоны и т. д. Во многих случаях приложение Silverlight можно портировать просто с помощью using новые пространства имен и настройка нескольких мест в коде, где был настроен API.

WinRT сам по себе не имеет ничего общего с HTML и CSS, и он имеет отношение к JavaScript только в том смысле, что он также подвергается там, подобно тому, как это делается для .NET. вам не нужно иметь дело с HTML / CSS/JS, когда вы использовать библиотеки пользовательского интерфейса WinRT в вашем .Net приложение Метро (ну, я думаю, если вы действительно хотите, вы можете разместить WebView управление...). Все ваши навыки .NET и Silverlight остаются очень актуальными в этой модели программирования.

с Build keynote:

Keynote stack

они предоставляют общие API для приложений HTML/CSS/JavaScript и приложений C#/XAML. C# и XAML будут использоваться, но это не будет WPF или Silverlight точно.

ключевая идея заключается в том, что теперь есть два пути развития - рабочий стол и метро.

  • рабочий стол, где живут старые приложения.
  • новый класс приложений, приложений Metro, может быть построен несколькими способами, в том числе путем VB.NET, C# или C++. Эти три языковых параметра могут использовать XAML для построения пользовательского интерфейса. Альтернативой является использование JavaScript/HTML5/CSS для разработки как пользовательского интерфейса, так и кода приложения.

некоторые важные моменты:

  • Windows 8 чувствует себя как масштабированная ОС мобильного телефона.
  • в метро нет перекрывающихся окон верхнего уровня, так же как нет их на мобильном телефоне. Если вы хотите приложение в стиле MDI, вам нужно оставаться на рабочем столе.
  • приложения Metro style автоматически приостанавливаются, когда они не видны. Это было сделано для продления срока службы батареи. Это означает, что это не будет иметь смысла для многих существующих настольных приложений, которые выполняют фон обработка даже в то время как пользователь не взаимодействует с ними, чтобы быть перенесены в метро.
  • ARM-версия Windows 8 не поддерживает настольные приложения. Поэтому, если вы хотите написать приложение, и вы хотите, чтобы оно работало на любой версии Windows, то это должно быть приложение Metro.

есть модифицированная версия архитектуры, которая, несомненно, поможет вам понять, где именно лежат вещи. Один из телерик ниндзя имел чат с CLR команда и изменила изображение:

Windows 8 Platform and Tools (including the CLR)

здесь вы можете увидеть, где CLR стоит. Платформа .NET framework теперь имеет два профиля

1-.NET Metro профиль (CLR, которые имеют дело с приложением Metro)

2 - профиль клиента .NET (среда CLR для C# и VB.NET приложения)

Я надеюсь, что это дает вам более ясную картину. Читайте полную статью в плохая картина стоит тысячи долгих обсуждений..

много деталей от Microsoft здесь.

среда выполнения Windows предоставляется с использованием метаданных API (.файлы winmd). Это тот же формат, который используется платформой .NET framework (Ecma-335). Базовый бинарный контракт упрощает доступ к API среды выполнения Windows непосредственно на выбранном языке разработки. Форма и структура API среды выполнения Windows могут быть поняты как статическими языками, такими как C#, так и динамическими языками, такими как Яваскрипт. IntelliSense доступен в JavaScript, C#, Visual Basic и C++.

короче говоря, среда выполнения Windows-это новый набор библиотек, предоставляющих функциональные возможности Windows и доступных для JavaScript/C#/VB/C++. Каждый язык был сделан, чтобы понять и иметь возможность называть их напрямую, а не проходить через какой-то Громовой слой.

Silverlight и WPF-это разновидности XAML, которые выполняются в среде CLR. Среди других функциональных возможностей, среды выполнения Windows предоставляет версии XAML очень похож на Silverlight, но делает это родным способом, а не через CLR. Он может быть доступен из среды CLR, но также и из C++.