我知道属性非常有用。有一些预定义的属性,例如[Browsable(false)],它允许您在财产选项卡中隐藏财产。下面是一个解释属性的好问题:.NET中的属性是什么?
您在项目中实际使用的预定义属性(及其名称空间)是什么?
我知道属性非常有用。有一些预定义的属性,例如[Browsable(false)],它允许您在财产选项卡中隐藏财产。下面是一个解释属性的好问题:.NET中的属性是什么?
您在项目中实际使用的预定义属性(及其名称空间)是什么?
当前回答
这是一篇关于有趣属性InternalsVisibleTo的文章。它基本上模仿了C++朋友访问功能。它对于单元测试非常方便。
其他回答
值得一提的是,这里列出了所有.NET属性。有几百个。
我不知道其他人,但我有一些严肃的RTF要做!
我喜欢将[ThreadStatic]属性与基于线程和堆栈的编程结合使用。例如,如果我希望一个值与调用序列的其余部分共享,但我希望在带外(即调用参数之外)执行,我可以使用类似的方法。
class MyContextInformation : IDisposable {
[ThreadStatic] private static MyContextInformation current;
public static MyContextInformation Current {
get { return current; }
}
private MyContextInformation previous;
public MyContextInformation(Object myData) {
this.myData = myData;
previous = current;
current = this;
}
public void Dispose() {
current = previous;
}
}
稍后在我的代码中,我可以使用它向代码下游的人提供带外的上下文信息。例子:
using(new MyContextInformation(someInfoInContext)) {
...
}
ThreadStatic属性允许我将调用范围仅限于所讨论的线程,避免了跨线程访问数据的混乱问题。
[TypeConverter(typeof(ExpandableObjectConverter))]
告诉设计器展开财产,这些属性是(控件的)类
[Obfuscation]
指示混淆工具对程序集、类型或成员执行指定的操作。(尽管通常使用程序集级别[Assembly:ObfuscateAssemblyAttribute(true)]
// on configuration sections
[ConfigurationProperty]
// in asp.net
[NotifyParentProperty(true)]
作为我喜欢的中间层开发人员
System.ComponentModel.EditorBrowsableAttribute允许我隐藏财产,以便UI开发人员不会被他们不需要看到的财产淹没。
System.ComponentModel.BindableAttribute有些东西不需要数据绑定。同样,减少了UI开发人员需要做的工作。
我也喜欢劳伦斯·约翰斯顿提到的默认值。
System.ComponentModel.BrowsableAttribute和Flags定期使用。
我使用System.STAThreadAttributeSystem.ThreadStaticAttribute当需要时。
顺便说一句这些对所有.Net框架开发人员来说都同样重要。