x:ClassModifier 指令
同时提供 x:Class
时修改 XAML 编译行为。 具体而言,提供的 x:Class
不是创建具有 Public
访问级别的部分 class
,而是使用 NotPublic
访问级别创建提供的 x:Class
。 此行为会影响生成的程序集中类的访问级别。
XAML 属性用法
<object x:Class="namespace.classname" x:ClassModifier="NotPublic">
...
</object>
XAML 值
价值 | 描述 |
---|---|
NotPublic | 要传递给指定 TypeAttributes.Public 与 TypeAttributes.NotPublic 的确切字符串因所使用的代码隐藏编程语言而异。 请参阅“备注”。 |
依赖
x:Class 也必须在同一元素上提供,并且该元素必须是页面中的根元素。 有关详细信息,请参阅 [MS-XAML] 第 6.3.1.8 节。
言论
.NET XAML 服务用法中 x:ClassModifier
的值因编程语言而异。 要使用的字符串取决于每个语言如何实现其 CodeDomProvider 以及它返回的类型转换器来定义 TypeAttributes.Public 和 TypeAttributes.NotPublic的含义,以及该语言是否区分大小写。
对于 C#,要传递给指定 TypeAttributes.NotPublic 的字符串
internal
。对于 Microsoft Visual Basic .NET,要传递给指定 TypeAttributes.NotPublic 的字符串
Friend
。对于 C++/CLI,不存在支持编译 XAML 的目标;因此,要传递的值未指定。
还可以在 C# 中指定 TypeAttributes.Public(在 C# 中指定public
,在 Visual Basic 中 Public
);但是,由于 TypeAttributes.Public 已是默认行为,因此不常指定 TypeAttributes.Public。
具有等效用户代码访问级别限制的其他值(如 C# 中的 private
)与 x:ClassModifier
无关,因为 XAML 不支持嵌套类引用,因此 TypeAttributes.NotPublic 修饰符的效果相同。
安全说明
x:ClassModifier
中声明的访问级别仍受特定框架及其功能的解释。 如果通过包 URI 引用从 WPF 资源引用引用该类,WPF 包含加载和实例化 x:ClassModifier
internal
的功能。 由于这种情况和可能由其他框架实现的其他框架所实现的其他框架,不完全依赖 x:ClassModifier
来阻止所有可能的实例化尝试。
另请参阅
- x:Class 指令
- WPF 中的
Code-Behind 和 XAML - x:FieldModifier 指令
- 安全性(WPF)
- 从 WPF 迁移到 System.Xaml 的
类型