什么是x:FieldModifier ="私有"我应该担心吗?

时间:2014-04-30 09:13:27

标签: c# wpf xaml private

我目前正在检查我的WPF项目中的Resharper消息,它告诉我每个输入控件都可以设置为私有。当我这样做时,它会将x:FieldModifier="Private"添加到控制节点。

我不熟悉XAML。什么是x:FieldModifier?如果我将其设置为Private会怎样?这很重要吗?它会破坏东西吗?

2 个答案:

答案 0 :(得分:7)

转换XAML后,您的控件将成为类中使用Namex: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 hidingencapsulation的原则表明只有外界才能看到明确需要的内容(例如,在某个特定类别之外),而其他任何内容都应该保留下来隐藏(因此可以在以后的时间点进行交换,而不会破坏组件的公共接口)。这就是ReSharper在这里强制执行的内容,因为输入控件通常只能在给定的用户控件或窗口中访问。因此,对于干净的代码而言,这种变化非常重要,因为它具有高度的可维护性。

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

  

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