2009-04-28 118 views
1

我對反射相當陌生,如果可能,我想知道如何創建類的實例,然後向類中添加屬性,設置這些屬性,然後再閱讀它們。我沒有任何代碼,因爲我甚至不知道如何開始討論這個問題。 C#或VB很好。.NET Reflection創建類屬性

謝謝

編輯:(擬定)

我的系統具有動態形式的創造者。我的一位同事要求可以通過網絡服務訪問表單數據。我的想法是創建一個類(基於動態表單)爲類添加屬性(基於表單字段)設置這些屬性(基於這些字段的值輸入),然後返回Web服務中的類。另外,Web服務將能夠設置類中的屬性,並最終將這些更改提交給db。

+3

你確定你只是使用字典無法通過名稱動態存儲值? – 2009-04-28 17:45:28

+0

與Stefan一致,基於你的問題,這聽起來像你正在嘗試使用反射,而另一種解決方案更合適。你能詳細說明一下嗎? – 2009-04-28 17:48:15

+0

考慮到建立在已建立的合同上的Web服務能夠序列化和非類化類,我想知道重點是什麼?你首先動態地創建一個類並實例化一個對象,然後通過SOAP對它進行序列化,在這一點上客戶端具有 - 不知道 - 你返回的類是什麼樣的,並且必須做任何xml解析......我是否缺少任何東西? =) – 2009-04-29 08:30:51

回答

1

我知道這是正在過度的爲什麼不吻,生成所需的XML通過Web服務來回報,然後解析返回的XML來填充數據庫簡化。

我的理由是,擴大的原因,你建議這樣做,我可以看到想要一個動態類的價值或原因是什麼?

7

如果你的意思是動態創建一個類,那麼這兩個選項是:

如果您的意思是創建一個現有類的實例,則從Activator.CreateInstance開始創建該對象的一個​​實例,然後查看Type上的方法,如GetProperty將返回PropertyInfo,您可以撥打GetValueSetValue


更新:對於你的描述,從Web服務返回的動態數據的情況下,那麼我建議你反對這種做法,因爲它是你很難代碼,很難靜態類型語言中消耗。相反,正如評論和其他答案中的建議,某種字典可能是更好的選擇。 (請注意,當我說返回某種字典時,我是以比喻形式而不是字面意義上的,即返回在概念上與字典相同的東西,例如鍵值對列表。我不推薦直接返回一個(即使你使用的WCF支持這個),因爲它通常更好地控制你返回的XML。)

1

Eric Gunnerson的書(程序員的C#入門)的Execution-Time Code Generation關於這個話題的一些很棒的信息尤其請參閱第14頁。他概述了完成動態類/代碼生成(CodeDOM和Reflection.Emit命名空間)的兩種主要方法。它還討論了這兩種方法的難度和表現。通讀一下,你應該找到你可能需要的一切。

0

真正的問題是,你需要什麼使用這些屬性?

什麼是用例?你需要以某種方式將這些屬性綁定到UI上嗎?使用什麼樣的技術? (WPF,Windows Forms?)

僅僅是你需要在運行時收集一組鍵/值對嗎?那麼也許一個簡單的字典就可以做到這一點。

如果你能上什麼是你需要的請詳細說明一下,我這裏敢肯定,人們可以想出很多方法可以幫助你,但它是很難給出一個很好的答案沒有更多的上下文。