.NET .resx文件:为什么name属性通常以>>开头

Pet*_*r B 5 .net resx winforms

在许多.resx文件中,我遇到过这样的事情:

<data name="&gt;&gt;OurLabel.Name" xml:space="preserve">
  <value>OurLabel</value>
</data>
Run Code Online (Sandbox Code Playgroud)

我的问题是:为什么属性name在很多情况下 - 但并非总是 - 从一开始&gt;&gt;

Han*_*ant 8

您在.resx文件中找到了Winforms表单,其Localizable属性设置为True. &gt;>字符的xml编码,因此要保存的属性值名称是">> OurLabel.Name".

您将看到的其他属性是Type,Parent,ZOrder.

它们的特殊之处在于它们是设计时属性.设计师为控件添加的额外功能.设计师添加这些属性的问题在于它们可能导致歧义.我能想到的最好的例子是故意造成这种模棱两可:

using System;
using System.ComponentModel;
using System.Windows.Forms;

class MyLabel : Label {
    [Localizable(true)]
    public string Type { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

将此一个放在窗体上,现在控件有两个 Type属性.你会在.resx文件中看到它们,如下所示:

 <data name="myLabel1.Type" xml:space="preserve">
   <value>Example</value>
 </data>
 <data name="&gt;&gt;myLabel1.Type" xml:space="preserve">
   <value>MyLabel, WindowsFormsApplication1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</value>
 </data>
Run Code Online (Sandbox Code Playgroud)

注意"myLabel1.Type"和">> myLabel1.Type"之间的区别.问题解决了.

你也会看到"$ this".使用前缀.它消除了表单属性的名称和表单上控件的名称之间的歧义.

  • 另外,直到现在,我才意识到所有以“ &gt;&gt;”为前缀的属性都不受本地化限制,因为它们都是“技术” /“非语言”属性。也许这是另一个SO-问题:-),但是我想知道,如果不是本地化的原因,即使将这些属性存储在resx文件中又有什么好处呢? (2认同)