我知道属性非常有用。有一些预定义的属性,例如[Browsable(false)],它允许您在财产选项卡中隐藏财产。下面是一个解释属性的好问题:.NET中的属性是什么?
您在项目中实际使用的预定义属性(及其名称空间)是什么?
我知道属性非常有用。有一些预定义的属性,例如[Browsable(false)],它允许您在财产选项卡中隐藏财产。下面是一个解释属性的好问题:.NET中的属性是什么?
您在项目中实际使用的预定义属性(及其名称空间)是什么?
当前回答
[Flags]非常方便。语法糖是肯定的,但还是相当不错的。
[Flags]
enum SandwichStuff
{
Cheese = 1,
Pickles = 2,
Chips = 4,
Ham = 8,
Eggs = 16,
PeanutButter = 32,
Jam = 64
};
public Sandwich MakeSandwich(SandwichStuff stuff)
{
Console.WriteLine(stuff.ToString());
// ...
}
// ...
MakeSandwich(SandwichStuff.Cheese
| SandwichStuff.Ham
| SandwichStuff.PeanutButter);
// produces console output: "Cheese, Ham, PeanutButter"
Leppie指出了一些我没有意识到的东西,这反而挫伤了我对这个属性的热情:它不指示编译器允许位组合作为枚举变量的有效值,编译器允许这一点用于枚举。我的C++背景显示通过。。。叹气
其他回答
[TypeConverter(typeof(ExpandableObjectConverter))]
告诉设计器展开财产,这些属性是(控件的)类
[Obfuscation]
指示混淆工具对程序集、类型或成员执行指定的操作。(尽管通常使用程序集级别[Assembly:ObfuscateAssemblyAttribute(true)]
[XmlIgnore]
因为这允许您忽略(在任何xml序列化中)“父”对象,否则在保存时会导致异常。
// on configuration sections
[ConfigurationProperty]
// in asp.net
[NotifyParentProperty(true)]
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)),并且包装的方法发生错误,那么调用堆栈不会显示正在调用引发错误的方法的方法。
在我们当前的项目中,我们使用
[ComVisible(false)]
它控制单个托管类型或成员或程序集中所有类型对COM的可访问性。
更多信息