我创建的简单类具有AttributeUsage
属性。当我尝试构建时出现错误:
Attribute 'AttributeUsage' is only valid on classes derived from System.Attribute
.
然后我让我的类从 Attribute 继承,一切都很好。
如果我使用AttributeUsage
属性,那么它会迫使我从Attribute
类继承。我的问题是我可以制作强制方法具有特定签名的属性吗?
谢谢您的帮助!
我创建的简单类具有AttributeUsage
属性。当我尝试构建时出现错误:
Attribute 'AttributeUsage' is only valid on classes derived from System.Attribute
.
然后我让我的类从 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