Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# x:FieldModifier=";“私人”;我应该担心吗?_C#_Wpf_Xaml_Private - Fatal编程技术网

C# x:FieldModifier=";“私人”;我应该担心吗?

C# x:FieldModifier=";“私人”;我应该担心吗?,c#,wpf,xaml,private,C#,Wpf,Xaml,Private,我目前正在检查我的WPF项目中的Resharper消息,它告诉我每个inputcontrol都可以设置为私有。执行此操作时,它会将x:FieldModifier=“Private”添加到控制节点 我对XAML没有那么丰富的经验。什么是x:FieldModifier?如果我将其设置为Private,会发生什么情况?这重要吗?它能破坏东西吗?当转换XAML时,控件会变成类中的字段,其名称由name或x:name属性指定。但是,这些字段有一个默认的内部访问修饰符。x:FieldModifier的目的是

我目前正在检查我的WPF项目中的Resharper消息,它告诉我每个inputcontrol都可以设置为私有。执行此操作时,它会将
x:FieldModifier=“Private”
添加到控制节点


我对XAML没有那么丰富的经验。什么是
x:FieldModifier
?如果我将其设置为
Private
,会发生什么情况?这重要吗?它能破坏东西吗?

当转换XAML时,控件会变成类中的字段,其名称由
name
x:name
属性指定。但是,这些字段有一个默认的
内部
访问修饰符。
x:FieldModifier
的目的是允许您控制访问修饰符的使用。因此
x:FieldModifier=“Private”
实际上将字段设置为私有。

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

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

一般来说,and的原则建议,只有明确需要的东西才应该对外部世界可见(例如,在给定类之外),而其他任何东西都应该保持隐藏状态(以便可以在稍后的时间点进行交换,而不会破坏组件的公共接口)。这正是ReSharper试图在这里实现的,因为输入控件通常只能从给定的用户控件或窗口中访问。因此,对于具有高度可维护性的干净代码来说,更改非常重要

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

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


我有一个Telerik RadTileView,我用扩展RadTileView的自定义用户控件动态填充它。如果我将RadTileView字段修饰符设置为Private,我是否仍然可以使用此.ParentOfType()从自定义用户控件引用该RadTileView(更具体地说是其项)?@NateKerkhofs:我不知道Telerik控件,因此,我只能描述必须满足的一般条件,以便您仍然能够使用该方法:1)类
RadTileView
必须在调用该方法的位置可见-我想ReSharper知道它是,因为这是可以在编译时识别的东西,只是把所有东西都私有化,而不检查它是否真的需要公开,听起来有点疯狂。但是,我从来没有尝试过RESARPER,这也只是猜测。“NATEKKKHOFS:2”,<代码> ParentOfType < /C>方法可能使用反射,但即使如此,它也必须以非公共类型和成员的方式来实现。这是不是很难告诉我,因为我只看到,而且它们还不够广泛,无法对该方法是否会考虑非公共标识符作出任何声明。