Почему мы используем тип @Master?

если у нас есть главная страница и страница контента. Так же директива @Page страницы контента выглядит как

<%@ Page Language="C#" MasterPageFile="~/Site1.Master" .... />

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

<%@ MasterType VirtualPath="~/Site1.Master" %>

Итак, мой вопрос заключается в том, почему мы используем директиву @MasterType, когда мы уже определили в директиве @page, что эта страница содержимого находится на главной странице (здесь - Site1.Master)

Ответ 1

В Документах Microsoft вы определяете тип свойства Master, которое позволяет получить доступ к свойствам вашего производного класса MasterPage.

Предоставляет способ создания строго типизированной ссылки на главную страницу ASP.NET при доступе к главной странице из свойства Master.

Как пример:

this.Master.SomePublicPropertyOfMaster = Value;

Ответ 2

Указание директивы @MasterType с типом MyMasterPage приводит к следующему определению свойства в коде класса:

public new MyMasterPage Master {
  get {
    return ({MyMasterPage})base.Master;
  }
}

Это определение свойства создается методом BuildMiscClassMembers класса TemplateControlCodeDomTreeGenerator.