Директива x:ClassModifier
Изменяет поведение компиляции XAML, когда также предоставляется x:Class. В частности, вместо создания частичного класса class с уровнем доступа Public (по умолчанию), предоставленный x:Class создается со уровнем доступа NotPublic. Это поведение влияет на уровень доступа для класса в генерированных сборках.
Использование атрибута XAML
<object x:Class="namespace.classname" x:ClassModifier="NotPublic">
...
</object>
Значения XAML
NotPublic |
Точная строка, передаваемая для указания TypeAttributes.Public или TypeAttributes.NotPublic, зависит от используемого языка программирования с выделенным кодом. См. примечания. |
Зависимости
x:Class также должен быть указан в том же элементе, а этот элемент должен быть корневым элементом страницы. Дополнительные сведения см. в разделе [MS-XAML] Раздел 4.3.1.8.
Заметки
Значение x:ClassModifier в службах XAML на платформе .NET Framework различается в зависимости от языка программирования. Используемая строка зависит от того, как каждый язык реализует свой CodeDomProvider, от преобразователей типов, возвращаемых для определения значений TypeAttributes.Public и TypeAttributes.NotPublic, а также от того, учитывает язык регистр или нет.
В C# передаваемой строкой для назначения TypeAttributes.NotPublic является internal.
В Microsoft Visual Basic .NET передаваемой строкой для назначения TypeAttributes.NotPublic является Friend.
Для C++/CLI не существует целей, поддерживающих компиляцию XAML, поэтому передаваемое значение не указано.
Можно также указать TypeAttributes.Public (public в C#, Public в Visual Basic), но указание TypeAttributes.Public используется редко, так как TypeAttributes.Public уже является поведением по умолчанию.
Другие значения с эквивалентными ограничениями на уровне доступа к пользовательскому коду, например private в C#, не относятся к x:ClassModifier, поскольку ссылки на вложенные классы не поддерживаются в XAML, и, таким образом, модификатор TypeAttributes.NotPublic оказывает тот же эффект.
Примечания относительно безопасности
Уровень доступа согласно объявлению в x:ClassModifier по-прежнему должен интерпретироваться по конкретным платформам и их возможностям. WPF включает возможности для загрузки и создания экземпляров типов, в которых x:ClassModifier равно internal, если на этот класс ссылается ресурс WPF с помощью ссылки URI типа "pack". Вследствие этого случая (и потенциально других подобных случаях, реализованных в других платформах), не следует полагаться исключительно на x:ClassModifier для блокирования всех возможных попыток создания экземпляров.
См. также
Ссылки
Основные понятия
Код программной части и XAML в WPF