C#Custom Attribute,Targets.Method WHERE returntype = type&& IsStatic

时间:2016-03-25 19:52:30

标签: c# attributes

所以,我有一个自定义属性,如下所示:

[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'
}

1 个答案:

答案 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 { }

这是您可以在编译时控制属性使用的所有参数。您可以通过反射在运行时验证使用方案,但这种方式很慢且容易出错。