为什么存在EditorBrowsableState.Never?

Die*_*ner 7 c# intellisense visual-studio

System.ComponentModel命名空间中存在EditorBrowsableAttribute.EditorBrowsableState类型具有以下成员:

  • 高级
  • 总是
  • 决不

这个烦人的属性可能是什么原因?特别是状态从不.它隐藏了功能,然后当你发现它时,你会觉得它很脏.所以,如果你在微软工作并实现这个类告诉我plz ... :)

唯一可以想象这个属性有意义的情况是,当你想要将某些东西标记为过时并将其隐藏在intellisense中以便更好地聚焦时.但在我遇到的所有情况下都使用了这个属性而没有过时的属性.我发现的最新例子是在wpf中使用Dispatcher.CheckAccess()方法.

Adr*_*tti 8

IMO是一个专门用于构建库的属性,在VS解决方案内部(当依赖关系不是外部的时),Intellisense将忽略它.几个有用的用例.

让我们首先看一下EditorBrowsableState.Advanced:使用某些语言(特别是VB.NET),您可以指示IDE(实际上是Intellisense)隐藏高级成员,这样您就只能看到最常用的方法.对于初学者来说噪音较小(当你掌握BCL的时候,你可以启用完整视图,并且你没有被大量模糊方法所暗示).

EditorBrowsableState.Never 有其他用法.

  • 一个是你说的(隐藏已弃用的过时方法).一个例子是 Form.Closing事件(隐藏因为被替换和扩展Form.FormClosing).
  • 另一个是隐藏错误拼写错误.例如,如果该属性适用于Keys.HanguelMode那么拼写错误将不可见(但出现兼容性).
  • 如果您需要向其他程序集公开一些安全的内部方法,它也可能很有用.您不会使用这些方法污染您的库接口(您可以记录它们并将它们保留为仅供内部使用).它可能比通过朋友程序集公开所有内部细节更好InternalsVisibleToAttribute.
  • 您可以使用它来隐藏潜在的危险方法.你提供它们是因为有人可能需要它们但你想阻止人们使用它们,如果可能的话.

  • 如果我在一个项目中工作,而我是唯一的开发人员(没关系,如果涉及多个解决方案/模块),那么我就不会使用它(并且我从未使用过EditorBrowsableState.Advanced)。如果我正在编写别人使用的库(也是在同一个更大项目上工作的同事!),那么是的,我经常使用_Never_(对于我编写的所有点,尤其是点1和3)。实际上是因为IMO人员不会将他们看不到的东西与Intellisense(谁读过文档?)一起使用,而且我什至可能没有正式记录它们(据我所知只有一个人使用)。 (2认同)
  • @DiegoFrehner是的,这是一种较弱的保护和隔离形式,但是我更喜欢InternalsVisibleToAttribute这样的东西。假设您正在实现一个理论上的StringBuffer类,而底层的char []数组是一个实现细节(出于性能原因在内部使用的详细信息)。例如,如果您有单独的[用于区域性特定文本格式的可插拔程序集](http://stackoverflow.com/a/23370462/1207195),则可能需要使用此类详细信息来提高性能,但您不会对此进行记录(否则,您将以_internal实施detail_)的形式进行文档记录,并将_little bit_隐藏起来。 (2认同)