我知道属性非常有用。有一些预定义的属性,例如[Browsable(false)],它允许您在财产选项卡中隐藏财产。下面是一个解释属性的好问题:.NET中的属性是什么?
您在项目中实际使用的预定义属性(及其名称空间)是什么?
我知道属性非常有用。有一些预定义的属性,例如[Browsable(false)],它允许您在财产选项卡中隐藏财产。下面是一个解释属性的好问题:.NET中的属性是什么?
您在项目中实际使用的预定义属性(及其名称空间)是什么?
当前回答
DebuggerHiddenAttribute,它允许避免单步执行不应调试的代码。
public static class CustomDebug
{
[DebuggerHidden]
public static void Assert(Boolean condition, Func<Exception> exceptionCreator) { ... }
}
...
// The following assert fails, and because of the attribute the exception is shown at this line
// Isn't affecting the stack trace
CustomDebug.Assert(false, () => new Exception());
此外,它还防止在堆栈跟踪中显示方法,这在使用只包装另一个方法的方法时非常有用:
[DebuggerHidden]
public Element GetElementAt(Vector2 position)
{
return GetElementAt(position.X, position.Y);
}
public Element GetElementAt(Single x, Single y) { ... }
如果现在调用GetElementAt(新的Vector2(10,10)),并且包装的方法发生错误,那么调用堆栈不会显示正在调用引发错误的方法的方法。
其他回答
在我看来,过时是框架中最有用的属性之一。对不应再使用的代码发出警告的功能非常有用。我喜欢有一种方法告诉开发人员不应该再使用某些东西,也喜欢有一个方法来解释为什么,并指出更好的/新的做法。
Conditional属性对于调试使用也非常方便。它允许您在代码中添加用于调试的方法,这些方法在构建解决方案以供发布时不会被编译。
然后,我发现有很多特定于Web控件的属性很有用,但这些属性更具体,在我发现的服务器控件开发之外没有任何用处。
在我们当前的项目中,我们使用
[ComVisible(false)]
它控制单个托管类型或成员或程序集中所有类型对COM的可访问性。
更多信息
DebuggerHiddenAttribute,它允许避免单步执行不应调试的代码。
public static class CustomDebug
{
[DebuggerHidden]
public static void Assert(Boolean condition, Func<Exception> exceptionCreator) { ... }
}
...
// The following assert fails, and because of the attribute the exception is shown at this line
// Isn't affecting the stack trace
CustomDebug.Assert(false, () => new Exception());
此外,它还防止在堆栈跟踪中显示方法,这在使用只包装另一个方法的方法时非常有用:
[DebuggerHidden]
public Element GetElementAt(Vector2 position)
{
return GetElementAt(position.X, position.Y);
}
public Element GetElementAt(Single x, Single y) { ... }
如果现在调用GetElementAt(新的Vector2(10,10)),并且包装的方法发生错误,那么调用堆栈不会显示正在调用引发错误的方法的方法。
[XmlIgnore]
因为这允许您忽略(在任何xml序列化中)“父”对象,否则在保存时会导致异常。
我喜欢System.Diagnostics中的[DuggerStepThrough]。
它非常方便,可以避免使用那些单行do-nothing方法或财产(如果您被迫在早期的.Net中工作,而没有自动财产)。将属性放在一个短方法或属性的getter或setter上,即使在调试器中单击“stepinto”,您也会立即执行。