2010-07-24 117 views
3

假設我有一個具有一些屬性和屬性的類A,並且具有相同的類B,如何在運行時將這兩個類屬性和屬性屬性合併到一個類中,或者更好是我可以將這兩個類添加到第三個類中,作爲這個新類的屬性,它們的Fields,Properties,Methods等等在運行時?在運行時將兩個類合併到一個類中

使用反射或新聞.NET 4.0動態或Expando的對象

編輯:媽,我對不起所有沒有說清楚,我要的是創造的MVC,其他類動態視圖模型在其他一些程序集中,我希望它們是Datavalidation屬性的模型的一部分。我不知道這些類會有多少或什麼類型,所以我想遍歷組件並選擇它們,然後將它們添加到主View Model。

+0

爲什麼在運行時?如果你想合併它們,爲什麼不合並代碼? – 2010-07-24 19:02:32

+0

你能解釋一下你正在試圖完成這個嗎?如果我們知道更多,我們可能會更好地幫助你。 – Andrei 2010-07-24 19:04:34

+1

Marc的答案指出,合併代碼在任何語言中都不是絕對必要的,例如'partial'關鍵字。 – 2010-07-24 19:10:14

回答

5

您不能在運行時更改類型。 Expando 可能是是一個選項,但我不清楚您想如何與此對象進行交互,因爲您似乎僅限於反射,並且expando不是反射的巨大朋友。

這可能有助於澄清您的要求,但IMO可能會考慮加載(運行時)基於來自兩個輸入的反射的屬性包;像Dictionary<string,object>這將讓你映射命名鍵值。

另一件事是可能是你是什麼這裏後partial類,但是這是一個類型分佈在多個源文件:

partial class Foo { 
    private string bar; 
} 
partial class Foo { 
    public string Bar { get {return bar;} set {bar = value;} } 
} 

最後一個選擇這裏TypeBuilder,但這是海量在大多數情況下矯枉過正。

3

假設你沒有訪問代碼爲兩個類(否則你可能只是將這些代碼合併),您可以創建與組合接口聚合了兩個類包裝的:

public class AandB 
{ 
    private ClassA _instanceA = new ClassA(); 
    private ClassB _instanceB = new ClassB(); 

    public bool PropertyA 
    { 
    get 
    { 
     return _instanceA.PropertyA; 
    } 
    set 
    { 
     _instanceA.PropertyA = value; 
    } 
    } 

    public bool PropertyB 
    { 
    get 
    { 
     return _instanceB.PropertyB; 
    } 
    set 
    { 
     _instanceB.PropertyB = value; 
    } 
    } 
}