我知道属性非常有用。有一些预定义的属性,例如[Browsable(false)],它允许您在财产选项卡中隐藏财产。下面是一个解释属性的好问题:.NET中的属性是什么?

您在项目中实际使用的预定义属性(及其名称空间)是什么?


当前回答

我总是将DisplayName、Description和DefaultValue属性用于我的用户控件、自定义控件或我将通过属性网格编辑的任何类的公共财产。.NET PropertyGrid使用这些标记来设置未设置为默认值的名称、描述面板和粗体值的格式。

[DisplayName("Error color")]
[Description("The color used on nodes containing errors.")]
[DefaultValue(Color.Red)]
public Color ErrorColor
{
    ...
} 

如果找不到XML注释,我只希望Visual Studio的IntelliSense将Description属性考虑在内。这样可以避免同一句话重复两次。

其他回答

我的投票将是有条件的

[Conditional("DEBUG")]
public void DebugOnlyFunction()
{
    // your code here
}

您可以使用它添加具有高级调试功能的函数;与Debug.Write类似,它只在调试构建中调用,因此允许您将复杂的调试逻辑封装在程序的主流之外。

如果我要进行代码覆盖率爬网,我认为这两个将是最好的:

 [Serializable]
 [WebMethod]

我喜欢System.Diagnostics中的[DuggerStepThrough]。

它非常方便,可以避免使用那些单行do-nothing方法或财产(如果您被迫在早期的.Net中工作,而没有自动财产)。将属性放在一个短方法或属性的getter或setter上,即使在调试器中单击“stepinto”,您也会立即执行。

DesignerSerializationVisibilityAttribute非常有用。当您在控件或组件上放置运行时属性,并且不希望设计器对其进行序列化时,可以这样使用:

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public Foo Bar {
    get { return baz; }
    set { baz = value; }
}

当您在调试期间将鼠标悬停在Type的实例上时,[DuggerDisplay]对于快速查看该类型的自定义输出非常有用。例子:

[DebuggerDisplay("FirstName={FirstName}, LastName={LastName}")]
class Customer
{
    public string FirstName;
    public string LastName;
}

这是它在调试器中的外观:

此外,值得一提的是,设置了CacheDuration属性的[WebMethod]属性可以避免不必要地执行web服务方法。