2011-09-12 62 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()并传递给它。

相关问题