什么x:FieldModifier ="私人"做什么,我应该担心吗?

Nza*_*all 1 c# wpf xaml private

我正在检查我的WPF项目中的Resharper消息,它告诉我每个inputcontrol都可以是私有的.当我这样做时,它会添加x:FieldModifier="Private"到控制节点.

我不熟悉XAML.什么是x:FieldModifier?如果我将它设置为会发生什么Private?这很重要吗?可以打破东西吗?

Mar*_*ila 7

转换XAML时,控件将成为类中使用Namex:Name属性指定名称的 字段.但是,这些字段具有默认internal访问修饰符.目的x:FieldModifier是允许您控制使用的访问修饰符.所以x:FieldModifier="Private"实际上将字段设为私有.


O. *_*per 5

当启用 XAML 的编译器(例如 C#、VB.NET)处理包含 XAML 文件的应用程序时,XAML 文件的大部分内容会被转换为以宿主语言(例如 C#、VB.NET)编写的临时代码。也就是说,XAML 文件被转换为普通的 CLI 类。

文档中所述,该x:FieldModifier指令会影响从 XAML 定义生成的类或这些类的成员的可见性。

一般来说,信息隐藏封装的原则表明,只有绝对需要的东西才应该对外部世界可见(例如,在给定的类之外),而其他任何东西都应该隐藏(以便以后可以交换)时间点而不破坏组件的公共接口)。这就是 ReSharper 试图在这里强制执行的,因为输入控件通常只能从给定的用户控件或窗口中访问。因此,这种更改对于使其自身具有高度可维护性的干净代码很重要。

这可以“破坏内容”的一种微妙方式是,通常,XAML 文件独立于它们所使用的底层编程语言。通常,您可以将应用程序的 C# 代码转换为另一种与 CLI 兼容的语言,然后继续使用 XAML 文件(如果相应的编译器也支持 XAML)。通过使用该x:FieldModifier指令,您可以打破这种独立性,因为该指令的值取决于语言:

您传递以指定 TypeAttributes.Public 与 TypeAttributes.NotPublic 的确切字符串会有所不同,具体取决于所使用的代码隐藏编程语言。