Директива x:ClassModifier

Изменяет поведение компиляции XAML, когда также указан x:Class. В частности, вместо создания разделяемого class с уровнем доступа Public (по умолчанию) предоставленный x:Class создается с уровнем доступа NotPublic. Это поведение влияет на уровень доступа для класса в созданных сборках.

Использование атрибута XAML

<object x:Class="namespace.classname" x:ClassModifier="NotPublic">
   ...
</object>

Значения XAML

Стоимость Description
NotPublic Конкретная строка, которую нужно передать для указания TypeAttributes.Public или TypeAttributes.NotPublic, зависит от языка программирования, используемого для написания кода программной части. См. заметки.

Зависимости

x:Class также должен быть предоставлен в том же элементе, и этот элемент должен быть корневым элементом на странице. Дополнительные сведения см. в разделе [MS-XAML] 6.3.1.8.

Замечания

Значение x:ClassModifier в использовании служб XAML .NET зависит от языка программирования. Используемая строка зависит от того, как каждый язык реализует его 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.

См. также