我目前正在检查我的WPF项目中的Resharper消息,它告诉我每个输入控件都可以设置为私有。当我这样做时,它会将x:FieldModifier="Private"
添加到控制节点。
我不熟悉XAML。什么是x:FieldModifier
?如果我将其设置为Private
会怎样?这很重要吗?它会破坏东西吗?
答案 0 :(得分:7)
转换XAML后,您的控件将成为类中使用Name
或x:Name
属性指定名称的字段。但是,这些字段具有默认的internal
访问修饰符。 x:FieldModifier
的目的是允许您控制使用的访问修饰符。所以x:FieldModifier="Private"
实际上将字段设为私有。
答案 1 :(得分:4)
当支持XAML的编译器(例如C#,VB.NET)使用XAML文件处理应用程序时,XAML文件的大部分内容都会被转换为用宿主语言编写的临时代码(例如C#,VB.NET)。也就是说,XAML文件将转换为普通的CLI类。
如docs中所述,x:FieldModifier
指令会影响从XAML定义生成的类或类成员的可见性。
一般来说,information hiding和encapsulation的原则表明只有外界才能看到明确需要的内容(例如,在某个特定类别之外),而其他任何内容都应该保留下来隐藏(因此可以在以后的时间点进行交换,而不会破坏组件的公共接口)。这就是ReSharper在这里强制执行的内容,因为输入控件通常只能在给定的用户控件或窗口中访问。因此,对于干净的代码而言,这种变化非常重要,因为它具有高度的可维护性。
这可以通过一种微妙的方式打破东西"通常,XAML文件独立于它们使用的底层编程语言。通常,您可以将应用程序的C#代码转换为另一种与CLI兼容的语言,并继续使用XAML文件(如果相应的编译器也支持XAML)。通过使用x:FieldModifier
指令,可以打破这种独立性,因为该指令的值依赖于语言:
您传递以指定TypeAttributes.Public与TypeAttributes.NotPublic的确切字符串会有所不同,具体取决于所使用的代码隐藏编程语言。