2012-03-16 81 views
1

我創建了一個自定義屬性,當它被擊中時寫入控制檯,但它似乎沒有被擊中。這是微軟的教程(http://msdn.microsoft.com/en-us/library/sw480ze8.aspx),並且正在2010,.net 4上運行。我猜測它一定是我做錯了,但是我看不到它是什麼。誰能幫忙?自定義屬性沒有被擊中

這是屬性,其代碼是從來沒有被擊中

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)] 
public class Author : Attribute 
{ 
    private string _name; 
    private double _version; 

    public Author(string name) 
    { 
     Console.WriteLine(string.Format("author {0} was just created", name)); 

     _name = name; 
     _version = 1.0; 
    } 
} 

這是一個使用它的類 - 它成功地寫出構造函數中的代碼:

/// <summary> 
/// TODO: Update summary. 
/// </summary> 
[Author("P. Ackerman")] 
public class Ackerman 
{ 
    public Ackerman() 
    { 
     Console.WriteLine("I created Ackerman."); 
    } 
} 

這是控制檯應用程序調用它併成功地將代碼打印到新的Ackerman()構造函數中:

​​

謝謝!

+0

屬性與類型定義不是針對類型的實例,所以你不會看到所謂的屬性構造除非你試圖檢查它 – kaj 2012-03-16 11:25:16

回答

3

不創建類的屬性實例,然後創建類的實例。只有這樣,你特別要求他們這樣的:

var attrib = author1.GetType().GetCustomAttributes(false); 

此代碼將觸發Console.WriteLine(string.Format("author {0} was just created", name));

+0

謝謝你 - 你是完全正確的。但是如果必須單獨調用它,具有屬性的意義何在? – rozza 2012-03-16 11:22:30

+1

屬性在許多情況下通常用於聲明性編程。你可以閱讀一些標準的屬性,如Serializable,DataMember,ServiceContract等等。例如,您可以使用「作者」屬性來顯示特定作者的所有類。您還應該閱讀關於面向方面的編程,因爲它與您試圖使用屬性完全相同 – Nikolay 2012-03-16 11:32:42