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

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


当前回答

[System.Security.Permissions.PermissionSetAttribute]允许使用声明性安全性将PermissionSet的安全操作应用于代码。

// usage:
public class FullConditionUITypeEditor : UITypeEditor
{
    // The immediate caller is required to have been granted the FullTrust permission.
    [PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")]
    public FullConditionUITypeEditor() { }
}

其他回答

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

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

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

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

它的名称不好,在框架中也不受支持,不应该需要参数,但这个属性是不可变类的有用标记:

[ImmutableObject(true)]
[TypeConverter(typeof(ExpandableObjectConverter))]

告诉设计器展开财产,这些属性是(控件的)类

[Obfuscation]

指示混淆工具对程序集、类型或成员执行指定的操作。(尽管通常使用程序集级别[Assembly:ObfuscateAssemblyAttribute(true)]

我建议使用nUnit库中的[TestFixture]和[Test]。

代码中的单元测试为重构和编码文档提供了安全性。

只有少数属性获得编译器支持,但AOP中有一个非常有趣的属性用法:PostSharp使用您定制的属性将IL注入到方法中,允许各种功能。。。log/trace是一些微不足道的示例,但其他一些好的示例是自动INotifyPropertyChanged实现(此处)。

一些发生并直接影响编译器或运行时:

[条件(“FOO”)]-只有在生成期间定义了“FOO“符号时,才会调用此方法(包括参数求值)[MethodImpl(…)]-用于指示一些事情,如同步、内联〔PrincipalPermission(…)〕-用于将安全检查自动注入代码[TypeForwardedTo(…)]-用于在程序集之间移动类型,而不重新生成调用方

对于通过反射手动检查的东西,我非常喜欢System.ComponentModel属性;像[TypeDescriptionProvider(…)]、[TypeConverter(…)】和[Editor(…)]]这样的东西可以完全改变数据绑定场景中类型的行为(即动态财产等)。