我創建的簡單類具有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
對不起,我的英文不好。在我想問的問題是:當我做屬性時,該屬性必須強制方法具有特定的簽名。我並不擔心屬性的構造函數(簽名)。在你給我的例子中:string url是一個必需的參數,Topic是命名參數。這裏是例子:當我在我的方法上使用Help屬性時,那個Help屬性必須強制方法有string和int參數。 – Dilshod
讓我試着重寫你的問題:是否可以編寫一個屬性來控制方法的簽名? – Fried
聽起來不錯。 – Dilshod