2013-07-25 74 views
1

我創建的簡單類具有AttributeUsage屬性。當我試圖建立我得到的錯誤:爲具有特定簽名的方法創建自定義屬性

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

然後我讓我的類繼承自Attribute並且一切都很好。

如果我使用AttributeUsage屬性,那麼它迫使我繼承Attribute類。我的問題是我可以使屬性強制方法具有特定的簽名?

感謝您的幫助!

回答

0

如果我理解正確:您正在尋找的是一個通過您的屬性控制編譯的工具。您可以檢查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

+0

對不起,我的英文不好。在我想問的問題是:當我做屬性時,該屬性必須強制方法具有特定的簽名。我並不擔心屬性的構造函數(簽名)。在你給我的例子中:string url是一個必需的參數,Topic是命名參數。這裏是例子:當我在我的方法上使用Help屬性時,那個Help屬性必須強制方法有string和int參數。 – Dilshod

+0

讓我試着重寫你的問題:是否可以編寫一個屬性來控制方法的簽名? – Fried

+0

聽起來不錯。 – Dilshod