【问题标题】:IsEnabled or Enabled?是启用还是启用?
【发布时间】:2011-04-06 20:14:19
【问题描述】:

在 Silverlight 和 WPF 中,布尔值属性以 Is (almost all) 为前缀,例如:

  • IsEnabled
  • IsTabStop
  • IsHitTestVisible

在所有其他 Microsoft 框架(winforms、BCL、ASP.NET)中不使用 Is。是什么促使他们的团队放弃了最初的命名约定 - 是必须坚持的演变还是错误命名?

【问题讨论】:

标签: wpf silverlight naming-conventions


【解决方案1】:

Is 前缀可以暗示该属性只有一个 get 访问器,并且正如 Thomas 和 Rachel 所说,它是一个布尔值。如果您打算同时实现 getset 访问器并且其类型不是 bool,请跳过前缀。

【讨论】:

  • 我不同意,我知道我之前在某些对象上设置了 IsEnabled。这可能是因为它是一个布尔值,不能设置为任何值。
  • 我倾向于同意这种解释,但是 WPF 中的许多读/写属性都有这个前缀......我认为它是为了表明该属性是一个布尔值
  • @Thomas 和 Rachel - 事实上这就是我想说的,但我设法写了一些别的东西:)
【解决方案2】:

就我个人而言,我总是尝试在布尔值前面加上一些能增加更多含义的东西(是、拥有、可以等)。我的用法来自以下 Microsoft 指南:

请使用 肯定短语(CanSeek 而不是 CantSeek)。或者,您还可以 以 Is 为前缀的布尔属性, 可以,或有,但仅限于它添加的地方 价值。

MSDN - Names of Type Members

我不认为总是如此并非总是如此。这些做法可以追溯到 .NET 2.0。在此之前,一切都是公平的。然而,在较新版本的框架中清理这些名称会引起各种麻烦(因此有些框架代码使用约定,而有些则不使用)。

虽然它确实使事情更具可读性。甚至使用您问题中的示例。你更喜欢哪个?

// ambiguous naming, could mean many things
myTab.TabStop

// definitely a true/false value
myTab.IsTabStop

【讨论】:

  • 有趣的是,这是一个新推荐,解释了大多数没有 Is 前缀的 winform。
  • @Chris S - 第一次就做好一切是很困难的。这可能是从 .NET 1/1.1 中吸取的教训之一
  • 对于 TabStop,“Is”增加了明确的价值:属性的值告诉你某物是否是制表位;该值本身不是制表位。对于已启用,附加值更加微妙。这里的“是”区分某物是否已启用和“已启用”,无论是什么,都可能是对象的已启用副本。另一个附加值是对象读起来更像英语:myObject.IsEnabled。
  • @EdwardBrey 将“启用”读作名词将是英语的延伸。所以我认为在这里删除“是”是合适的
  • 在布尔属性前面添加Is 允许添加一个事件通知一个积极的变化而不会发生名称冲突。例如,您可以拥有属性IsEnabled 和事件EnabledDisabled。这种事件命名将与现有事件FrameworkElement.Initialized 一致。因此,其基本原理可能是一目了然地表明该成员是财产,而不是事件。或者也许是不排除将来添加此类事件。或者也许是别的东西;我只是猜测。
【解决方案3】:

Is 前缀是官方 Microsoft 框架设计指南的一部分(这并不意味着所有 MS 产品都遵守它...)。

我个人觉得它很有用,如果一直使用的话。它立即告诉您属性是布尔值。你可以用也可以不用,最重要的是要保持一致……

托马斯

【讨论】:

    猜你喜欢
    • 2013-01-03
    • 1970-01-01
    • 2017-08-25
    • 2012-11-06
    • 2014-08-16
    • 1970-01-01
    • 2020-03-18
    • 2021-09-09
    • 2019-07-14
    相关资源
    最近更新 更多