【问题标题】:Creating custom attributes for methods that has specific signature为具有特定签名的方法创建自定义属性
【发布时间】:2013-07-25 18:45:24
【问题描述】:

我创建的简单类具有AttributeUsage 属性。当我尝试构建时出现错误:

Attribute 'AttributeUsage' is only valid on classes derived from System.Attribute

然后我让我的类从 Attribute 继承,一切都很好。

如果我使用AttributeUsage 属性,那么它会强制我从Attribute 类继承。我的问题是我可以制作强制方法具有特定签名的属性吗?

感谢您的帮助!

【问题讨论】:

    标签: c# attributes custom-attributes attributeusage


    【解决方案1】:

    如果我理解正确:您正在寻找的是一种通过您的属性控制编译的工具。您可以检查 stylecop 或 fxcop 是否符合您的需求。或者,您可以扩展 Visual Studio 以访问源代码模型。扩展可以检查源代码(参见http://blogs.msdn.com/b/sqlserverstorageengine/archive/2007/03/02/using-visual-studio-s-code-model-objects-for-code-base-understanding.aspx),评估属性并生成编译器警告,任何你喜欢的错误。

    ====================================

    原答案:

    答案:你只需要提供相应的构造函数

    [AttributeUsage(AttributeTargets.All)]
    public class HelpAttribute : System.Attribute
    {
        // Required parameter
        public HelpAttribute(string url) 
        {
            this.Url = url;
        }
    
        // Optional parameter
        public string Topic { get; set; }
    
        public readonly string Url;
    
    
    }
    
    public class Whatever
    {
        [Help("http://www.stackoverflow.com")]
        public int ID { get; set; }
    
        [Help("http://www.stackoverflow.com", Topic="MyTopic")]
        public int Wew { get; set; }
    
        // [Help] // without parameters does not compile
        public int Wow { get; set; }
    }
    

    允许的参数类型在 MSDN 中列出:http://msdn.microsoft.com/en-us/library/aa664615(v=vs.71).aspx

    延伸阅读:http://msdn.microsoft.com/en-us/library/aa288454(v=vs.71).aspx

    【讨论】:

    • 抱歉我的英语不好。关于我想问的问题是:当我创建属性时,该属性必须强制方法具有特定的签名。我不担心属性的构造函数(签名)。在您给我的示例中是:字符串 url 是必需的参数,主题是命名参​​数。这是示例:当我在我的方法上使用 Help 属性时,该 Help 属性必须强制方法具有字符串和 int 参数。
    • 让我试着重写你的问题:是否可以写一个属性来控制一个方法的签名?
    猜你喜欢
    • 2021-09-01
    • 2013-04-10
    • 2018-07-30
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    • 2014-05-23
    • 1970-01-01
    相关资源
    最近更新 更多