2011-07-29 85 views
5

有什麼方法可以訪問屬性中屬性附加屬性的類和屬性名稱?在屬性中訪問類和屬性名稱

例如

public class User { 
    public string Email { get; set; } 
    public string FirstName { get; set; } 

    [MyAttrubute] 
    public string LastName { get; set; } 
} 

然後在MyAttribute類

public class MyAttributeAttribute { 
    public MyAttributeAttribute() : base() { 
     string className = /*GET CLASS NAME - should return "User" */ 
     string propertyName = /*GET PROPERTY NAME - should return LastName*/ 
    } 
} 

我知道我可以在構造函數中的信息傳遞,但希望有一個簡單的方法了一些如何節省通過反射或反覆重新輸入信息或...

回答

7

對不起,但沒有這是不可能的。您也可以有

public class User { 
    public string Email { get; set; } 
    public string FirstName { get; set; } 

    [MyAttrubute] 
    public string LastName { get; set; } 
} 

[MyAttrubute] 
public class OtherClass { 

    [MyAttrubute] 
    public string AnotherProperty { get; set; } 
} 

該屬性可以從任何地方創建。即使下面是創建一個實例的有效方法:

var att = new MyAttribute(); 

你的問題可以歸結爲「我可以檢測我的自定義類是從實例?」。在我的最後一個例子中,可能使用StackTrace。但是由於它們是由.NET運行時構建的,所以你無法走這條路線。

+1

不知道我遵循你的推理(雖然總體答案可能仍然是相同的)。每個屬性都是它自己的MyAttribute類的實例,因此每個屬性都可以在其構造函數中採用不同的值並將其存儲在本地。它可以裝飾多個屬性的事實不能成爲我無法獲取裝飾類/屬性的原因。我想在運行時可能會有一種方法來確定此屬性的這個實例附加到什麼類/ proprety – Peter

+0

@Peter - 對不起,我澄清了我的答案。 – CodeNaked