Kniga-Online.club
» » » » Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Читать бесплатно Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю. Жанр: Базы данных год 2004. Так же читаем полные версии (весь текст) онлайн без регистрации и SMS на сайте kniga-online.club или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Перейти на страницу:

public partial class App : Application

{

  private void App_OnStartup(object sender, StartupEventArgs e)

  {

  }

  private void App_OnExit(object sender, ExitEventArgs e)

  {

  }

}

Обратите внимание, что класс помечен как частичный (partial). На самом деле все оконные классы в отделенном коде для файлов XAML помечаются как частичные. В этом-то и кроется решение вопроса, где находится метод Main(). Но сначала необходимо выяснить, что происходит при обработке файлов XAML утилитой msbuild.ехе.

Отображение разметки XAML окна на код C#

Когда утилита msbuild.exe обрабатывает файл *.csproj, она создает для каждого файла XAML в проекте три файла: *.g.cs (где g означает autogenerated (автоматически сгенерированный)), *.g.i.cs (где i означает /ntelliSense) и *.baml (для BAML (Binary Application Markup Language — двоичный язык разметки приложений)). Такие файлы сохраняются в каталоге objDebug (и могут просматриваться в окне Solution Explorer за счет щелчка на кнопке Show All Files (Показать все файлы )).

Чтобы их увидеть, может потребоваться щелкнуть на кнопке Refresh (Обновить) в окне Solution Explorer, т.к. они не являются частью фактического проекта, а представляют собой артефакты построения.

Чтобы сделать процесс более осмысленным, элементам управления полезно назначить имена. Назначьте имена элементам управления Button и Calendar, как показано ниже:

<Button Name="ClickMe" Content="Button" HorizontalAlignment="Left"

  Margin="10,10,0,0"

  VerticalAlignment="Top" Width="75" Click="Button_Click">

// Для краткости разметка не показана,

</Button>

<Calendar Name="MyCalendar" HorizontalAlignment="Left" Margin="10,41,0,0"

VerticalAlignment="Top"/>

Теперь повторно скомпилируйте решение (или проект) и обновите файлы в окне Solution Explorer. Если открыть файл MainWindow.g.cs в текстовом редакторе, то внутри обнаружится класс по имени MainWindow, который расширяет базовый класс Window. Имя данного класса является прямым результатом действия атрибута х:Class в начальном дескрипторе <Window>.

В классе MainWindow определена закрытая переменная-член типа bool (с именем _contentLoaded), которая не была напрямую представлена в разметке XAML. Указанный член данных используется для того, чтобы определить (и гарантировать) присваивание содержимого окна только один раз. Класс также содержит переменную-член типа System.Windows.Controls.Button по имени ClickMe. Имя элемента управления основано на значении атрибута x:Name в открывающем объявлении <Button>. В классе не будет присутствовать переменная для элемента управления Calendar. Причина в том, что утилита msbuild.ехе создает переменную для каждого именованного элемента управления в разметке XAML, который имеет связанный код в отделенном коде. Когда такого кода нет, потребность в переменной отпадает. Чтобы еще больше запутать ситуацию, если бы элементу управления Button не назначалось имя, то и для него не было бы предусмотрено переменной. Это часть магии WPF, которая связана с реализацией интерфейса IComponentConnector.

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

Сгенерированный компилятором класс также явно реализует интерфейс IComponentConnector из WPF, определенный в пространстве имен System.Windows.Markup. В интерфейсе IComponentConnector имеется единственный метод Connect(), который реализован для подготовки каждого элемента управления, определенного в разметке, и обеспечения логики событий, как указано в исходном файле MainWindow.xaml. Можно заметить обработчик, настроенный для события щелчка на кнопке ClickMe. Перед завершением метода переменная-член _contentLoaded устанавливается в true. Вот как выглядит данный метод:

void System.Windows.Markup.IComponentConnector.Connect(int connectionId,

                                                       object target)

{

  switch (connectionId)

  {

    case 1:

    this.ClickMe = ((System.Windows.Controls.Button)(target));

    #line 11 "....MainWindow.xaml"

    this.ClickMe.Click +=

      new System.Windows.RoutedEventHandler(this.Button_Click);

    #line default

    #line hidden

    return;

  }

  this._contentLoaded = true;

}

Чтобы продемонстрировать влияние неименованных элементов управления на код, добавьте к календарю обработчик события SelectedDatesChanged. Перекомпилируйте приложение, обновите файлы и заново загрузите файл MainWindow.g.cs. Теперь в методе Connect() присутствует следующий блок кода:

Перейти на страницу:

Троелсен Эндрю читать все книги автора по порядку

Троелсен Эндрю - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки kniga-online.club.


Язык программирования C#9 и платформа .NET5 отзывы

Отзывы читателей о книге Язык программирования C#9 и платформа .NET5, автор: Троелсен Эндрю. Читайте комментарии и мнения людей о произведении.


Уважаемые читатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

  • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
  • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
  • 3. Просьба отказаться от нецензурной лексики.
  • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

Надеемся на Ваше понимание и благоразумие. С уважением, администратор kniga-online.


Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*