2011-09-12 99 views
1

我有以下類別:在子類中,如何讓不同類型的特定屬性?

class BusinessBase {  } 

class BusnessChild: BusinessBase {  } 

class VisualBase 
{ 
    BusinessBase BusinessObject {get; set;} 
} 

class VisualChild: VisualBase 
{ 
    // I'm instantiate an instance of BusinessChild and 
    // assign it to BusinessObject property 
} 

在每種情況下的視覺孩子有從適當類型BusinessChild實例的對象。

我的意思是他們是BusinessChild1BusinessChild2VisualChild1VisualChild2和所有的人都從VisualBaseBusinessBase繼承。


的問題是:

有沒有辦法讓BusinessChildVisualChild的實例,不需要在子類中創建一個新的屬性?因爲我想處理父引用中的所有子實例。

我認爲到目前爲止是創建一個名爲GetBusinessObject<T>泛型方法,並通過相應的業務類型吧,但我不知道它可以自動完成以某種方式(不通過類型)。

請讓我瞭解更多信息,如果它是不明確的。

回答

3

一個顯而易見的方法是使VisualBase通用:

class VisualBase<T> where T : BusinessBase 
{ 
    T BusinessObject {get; set;} 
} 

class VisualChild1 : VisualBase<BusinessChild1> 
{ 
    ... 
} 
+0

有時是第二快的是一個地方有過之而無不及需要什麼:) – Jon

+0

@喬恩飛碟雙向:我很尷尬,因爲我不認爲一個泛型類的,也許是因爲我以前沒有使用過它。非常感謝您 –

+0

@French男孩:沒必要尷尬 - 我只是希望它你需要什麼:) –

0

您可以裝飾的派生類中使用自定義屬性:

[BusinessObjectTypeAttribute(typeof(VisualChild))] 
class VisualChild: VisualBase 
{ 
    // I'm instantiate an instance of BusinessChild and 
    // assign it to BusinessObject property 
} 

然後你讀出的GetCustomAttributes()此屬性和創建實例與Activator.CreateInstance()並傳遞給它。

相關問題