想象一下下面的類:動態通過反射生成屬性的getter/setter方法或類似
public class Settings
{
[FileBackedProperty("foo.txt")]
public string Foo { get; set; }
}
我希望能夠寫類似的東西上面,並有settings.Foo
從一個文件「foo.txt」讀和settings.Foo = "bar"
寫入「foo.txt」。
顯然這是一個簡化的例子,我不會在生產應用程序中做到上述,但還有其他一些例子,如果我希望Foo存儲在ASP.net會話狀態「foo」中,但我感到厭倦一遍又一遍寫如下代碼:
public int Foo
{
get
{
if (Session["foo"] != null)
return Convert.ToInt32(Session["foo"]);
else
// Throw an exception or return a default value
}
set
{
Session["foo"] = value;
}
}
(再次這個例子被簡化,我不會寫上面的代碼,其實我在撒謊,我上面的代碼和我合作,重構它,因此這個問題)
上面的例子沒有問題,除非你有50個不同的會話值都有類似的邏輯。那麼有沒有辦法將第二個屬性轉換成類似於第一個屬性? (?使用屬性和反射,或者一些其他方法)
如果您使用的是Visual Studio,則應該查看[code snippets](http://msdn.microsoft.com/zh-cn/library/ms165392%28v=vs.90%29.aspx)。它們允許你輸入簡短的內容,擴展到所需的代碼,然後允許你填寫指定的區域。類似於現有的propg等 – 2012-04-04 20:26:22
@JoshuaDrake這看起來和複製/粘貼一樣糟糕。如果我想改變實現呢?我仍然必須回去改變每一個物業。 – thelsdj 2012-04-04 20:28:48
所以你想在運行時動態添加屬性?你有所有的服務器機器,還是對性能的期望很低?並不是說你不能這麼做,但我會強烈反對。如果你在運行時並不意味着什麼,那麼你將不得不重新生成任何代碼輸出。 – 2012-04-04 20:31:30