我知道属性非常有用。有一些预定义的属性,例如[Browsable(false)],它允许您在财产选项卡中隐藏财产。下面是一个解释属性的好问题:.NET中的属性是什么?
您在项目中实际使用的预定义属性(及其名称空间)是什么?
我知道属性非常有用。有一些预定义的属性,例如[Browsable(false)],它允许您在财产选项卡中隐藏财产。下面是一个解释属性的好问题:.NET中的属性是什么?
您在项目中实际使用的预定义属性(及其名称空间)是什么?
当前回答
我的投票将是有条件的
[Conditional("DEBUG")]
public void DebugOnlyFunction()
{
// your code here
}
您可以使用它添加具有高级调试功能的函数;与Debug.Write类似,它只在调试构建中调用,因此允许您将复杂的调试逻辑封装在程序的主流之外。
其他回答
[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++背景显示通过。。。叹气
这是一篇关于有趣属性InternalsVisibleTo的文章。它基本上模仿了C++朋友访问功能。它对于单元测试非常方便。
作为我喜欢的中间层开发人员
System.ComponentModel.EditorBrowsableAttribute允许我隐藏财产,以便UI开发人员不会被他们不需要看到的财产淹没。
System.ComponentModel.BindableAttribute有些东西不需要数据绑定。同样,减少了UI开发人员需要做的工作。
我也喜欢劳伦斯·约翰斯顿提到的默认值。
System.ComponentModel.BrowsableAttribute和Flags定期使用。
我使用System.STAThreadAttributeSystem.ThreadStaticAttribute当需要时。
顺便说一句这些对所有.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属性考虑在内。这样可以避免同一句话重复两次。
如果项目不在您的解决方案中,[EditorBrowsable(EditorBrowsableState.Never)]允许您对IntelliSense隐藏财产和方法。非常有助于隐藏流畅接口的无效流。您希望多长时间使用GetHashCode()或Equals()?
对于MVC,[ActionName(“Name”)]允许您使用相同的方法签名进行Get操作和Post操作,或者在操作名称中使用破折号,否则,如果不为其创建路由,就无法实现这一点。