2015-04-02 74 views
1

可以創建一個屬性,其行爲類似於CallerMemberNameAttribute實現與CompilerServices.CallerMemberAttribute具有類似行爲的屬性

我的意思是,我用Google搜索並找到了this article,說CallerMemberName是一個屬於CompilerServices組的屬性,換句話說,這個屬性改變了編譯器構建我的IL的方式。所以如果不定製c#編譯器就不可能複製這種行爲。

但我還不確定。我有一些希望,有人在stackoverflow可以說,否則。所以這個問題是爲了它。

一些背景:

我在尋找這主要是爲改善此代碼:

public int Prop 
{ 
    { get { return (int)this["prop"]; } 
    { set { this["prop"] = value; } 
} 

我在我的應用程序,它是一本字典,並具有代表性質的許多類具體的關鍵。

使用StackTrace(在C#4.0)和CallerMemberName(在C#5.0)我能更新我的代碼如下:

public int Prop 
{ 
    { get { return Get(); } 
    { set { Set(value); } 
} 

現在我的目標是要存檔一些這樣的:

public int Prop { { [DicGet]get; [DicSet]set; } } 

那麼有人可以幫助我嗎?這是可能的?

回答

2

可以創建一個具有類似於CallerMemberNameAttribute行爲的屬性?

只有通過自己改變C#編譯器,基本上。畢竟,您要求的行爲類似於C#編譯器具有特定知識和代碼來處理的行爲 - 因此您應該期望C#編譯器需要特定的知識和代碼來處理類似的情況。

現在我的目標是要存檔一些這樣的:

public int Prop { { [DicGet]get; [DicSet]set; } } 

所以有人可以幫助我嗎?這是可能的?

不是開箱即用,沒有。

選項:

  • 修改羅斯林編譯器(它現在open source) - 我不會推薦,雖然。
  • 使用PostSharp
  • 編譯之前
  • 使用動態類型,而不是使用某種形式的預處理程序(例如延長DynamicObject和處理屬性訪問這種方式)
相關問題