Директива 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
.
См. также
.NET Desktop feedback