为具有特定签名的方法创建自定义属性

本文关键字:方法 创建 自定义属性 | 更新日期: 2023-09-27 18:25:07

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

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

然后我让我的类继承自属性,一切都很好。

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

感谢您的帮助!

为具有特定签名的方法创建自定义属性

如果我理解正确的话:您正在寻找的是通过属性控制编译的工具。您可以检查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