尽管匈牙利命名法是时下认为是不好的做法,它仍然是很常见的编码中的名称类型的用户界面元素,无论是使用前缀(lblTitle,txtFirstName,...)或后缀(TitleLabel,FirstNameTextBox,...).
在我的公司,我们也这样做,因为它使得同事(或很久以前自己)编写的代码更容易阅读(根据我的经验).这个参数通常提出反对这样做 - 如果类型改变,你必须改变变量的名称 - 不是很强,因为改变UI元素的类型通常需要重写代码的所有部分,无论如何它被引用.
所以,我正在考虑在开始WPF开发时保持这种做法(嗯......我们应该使用txtTextBlocks或TextBoxes 的前缀吗?).我错过了什么大的劣势?这是你说"不要这样做,因为......"的机会.
编辑:我知道通过数据绑定,名称UI元素的需求减少.然而,有时需要它,例如在开发自定义控件时......
Ree*_*sey 31
就个人而言,我发现WPF在这方面改变了规则.通常情况下,您可以在很少或没有代码的情况下逃脱,因此使用前缀来区分名称会使事情变得更加混乱而不是更加混乱.
在Windows窗体中,每个控件都在代码中按名称引用.使用大型UI,半匈牙利符号很有用 - 更容易区分您正在使用的内容.
但是,在WPF中,这是一个需要名称的罕见控件.当你必须通过代码访问控制,通常最好使用附加属性或行为这样做,在这种情况下,你永远也处理的不是一个单一的控制措施.如果您正在使用UserControl或Window代码隐藏,我只使用"标题"和"名称"而不是"txtTitle",特别是因为现在您可能只会处理一些有限的控件,而不是所有这些.
在大多数情况下,即使是自定义控件也不需要名称.您将需要遵循约定的模板名称(即:PART_Name),但不是实际的x:UI的名称元素...
Phi*_*eck 13
根据我的经验 - 在WPF中,当您更改控件的类型时,除非您做错了什么,否则通常不必重写任何代码.实际上,大多数情况下,您不会在代码中引用控件.是的,您最终会这样做,但WPF中对UI元素的大多数引用都是由同一个XAML中的其他元素引用的.
就个人而言,我发现"lblTitle,lblCompany,txtFirstName"比"Title"更难阅读.我没有.intWidth和.intHeight(再见lpzstrName!).为什么有.lblFirstName?我可以理解TitleField或TitleInput或更多,因为它描述的是什么,而不是如何描述.
对我来说,希望有一个类型的分离通常意味着我的UI代码试图做太多 - 当然它在处理一个UI元素,它在窗口代码!如果我不处理UI元素周围的代码,为什么我会在这里编写代码呢?
我喜欢使用约定(一般来说只是一个好主意),但对于UI的东西,我喜欢它在前面有控件的类型,后面是描述性名称 - LabelSummary,TextSummary,CheckboxIsValid等.
这听起来不起眼,但是对于把第一类主要的原因是,他们将一起出现在智能感知列表 - 所有的标签一起,复选框,等等.
即使从 Winforms 的角度来看,我也不喜欢半匈牙利人。
在我看来,最大的缺点是,我写了很多 ui 代码是匈牙利语使错误更难发现。如果您尝试更改文本框上的 checked 属性,编译器通常会选择它,但它不会选择以下内容:
lblSomeThing.Visible = someControlsVisible;
txtWhatThing.Visible = someControlsVisible;
pbSomeThing.Visible = someControlsVisible;
Run Code Online (Sandbox Code Playgroud)
我发现调试要容易得多:
someThingLabel.Visible = someControlsVisible;
whatThingTextBox.Visible = someControlsVisible;
someThingPictureBox.Visible = someControlsVisible;
Run Code Online (Sandbox Code Playgroud)
我还认为将 addCommentsButton 与 addCommentsTextBox 分组比将 btnAddComments 与 btnCloseWindow 分组要好得多。你什么时候打算一起使用最后两个?
至于找到我想要的控制,我同意 Philip Rieck。我经常想处理与特定逻辑概念(如标题或添加注释)相关的所有控件。我几乎从不想找到恰好在此控件上的任何或所有文本框。
这在 WPF 中可能无关紧要,但我认为应该始终避免使用匈牙利语。
| 归档时间: |
|
| 查看次数: |
20666 次 |
| 最近记录: |