所以,我有一个自定义属性,如下所示:
[AttributeUsage(System.AttributeTargets.Method, AllowMultiple = false)]
public class MyAttribute: System.Attribute
{
private string name;
public double version;
public MyAttribute(string _name)
{
this.name = _name;
version = 1.0;
}
}
是否可以在此属性中添加以下条件:
Method.ReturnType = typeof(specificClass)
Method.IsStatic
另外,我如何实现以下条件?
public static void Do(Func<type> func) where func : MyAttribute //make sure Func<type> is decorated with my attribute
{
//do something with 'func'
}
答案 0 :(得分:1)
不,不是。 AttributeUsage
确定如何使用自定义属性类。
第一个AttributeUsage
参数(ValidOn
)必须是AttributeTargets
枚举的一个或多个元素。可以使用OR运算符将多个目标类型链接在一起,如下所示:
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]
class NewPropertyOrFieldAttribute : Attribute { }
如果AllowMultiple
参数设置为true,那么结果属性可以多次应用于单个实体,如下所示:
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
class MultiUseAttr : Attribute { }
[MultiUseAttr]
[MultiUseAttr]
class Class1 { }
[MultiUseAttr, MultiUseAttr]
class Class2 { }
如果Inherited
设置为false,则属性不会从属于派生的类派生的类继承。例如:
[AttributeUsage(AttributeTargets.Class, Inherited = false)]
class Attr1 : Attribute { }
[Attr1]
class BClass { }
// In this case Attr1 is not applied to DClass via inheritance.
class DClass : BClass { }
这是您可以在编译时控制属性使用的所有参数。您可以通过反射在运行时验证使用方案,但这种方式很慢且容易出错。