2013-06-25 34 views
0

動態創建類的實例,它可以每次都不同,並且仍然能夠訪問它就是我想要實現下列屬性

我有一個名爲classtestunknown例如3個自定義類作爲跟隨:

public class class 
{ 
    public string name { get; set; } 
    public Guid ID { get; set; } 
    public int interval { get; set; } 
} 

public class test 
{ 
    public string name { get; set; } 
    public Guid ID { get; set; } 
    public int interval { get; set; } 
} 

public class unknown 
{ 
    public string name { get; set; } 
    public Guid ID { get; set; } 
    public int interval { get; set; } 
} 

現在在我的節目,我讀它包含有創建的實例類的名臺詞的XML文件。

<Messages> 
    <Message Name='ClassMessage' Type='class' /> 
    <Message Name='TestMessage' Type='test' /> 
    <Message Name='UnknownMessage' Type='unknown' /> 
</Messages> 

我將遍歷XML中的每一行,並基於XML中的給定類型,我必須創建該類的一個實例。我知道你可以通過Activator.CreateInstance()實現這個唯一的問題是,我將無法訪問它的屬性(名稱,ID,間隔)。

在上面的例子中,雖然我正在處理一些與Microsoft Dynamics CRM 4.0的Web服務對話並且有很多類應該可以選擇的類,但它只有大約3個類。

+0

是否所有的類都有相同的成員?爲什麼不給他們一個共同的祖先? – Steve

+0

@Steve:不,他們不是我在示例中儘可能簡單地創建了這些類,儘管CRM 4.0的類與所有成員完全不同。 –

+0

我認爲你絕對可以用反射來做到這一點,但這不是我一直使用的東西。請參閱http://stackoverflow.com/a/9458673/425871,其中包含有關該主題的一些信息。 – Steve

回答

0
object foo = Activator.CreateInstance("test"); 
(foo as test).name = "TestMessage"; 

更新:這是你真正想要做的。 Set object property using reflection

+0

的類,如果我知道它是什麼類,但是在使用Activator創建實例的時候,我只能得到類的字符串名。因此,做(foo作爲測試)將不可能,因爲那時我還不知道它的類測試。 –

+0

我正試圖從您那裏獲取這些信息。你沒有給出激活發生的背景。 :-) – catfood

+1

這正是我需要的!非常感謝! –

相關問題