在子类中,如何为特定属性获取不同类型?

时间:2011-09-12 11:34:06

标签: c# oop class inheritance

我有以下课程:

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实例的对象。

我的意思是BusinessChild1BusinessChild2 VisualChild1VisualChild2都是VisualBaseBusinessBase,所有这些都是BusinessChildVisualChild继承的。< / p>


问题是:

有没有办法从GetBusinessObject<T>获取{{1}}的实例,而无需在子类中创建新属性?因为我想处理来自父参考的所有子实例。

到目前为止,我的想法是创建一个名为{{1}}的通用方法并将相应的业务类型传递给它,但我想知道它是否可以自动完成(不通过类型)。

如果不清楚,请向我询问更多信息。

2 个答案:

答案 0 :(得分:3)

一个明显的方法是使VisualBase通用:

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

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

答案 1 :(得分:0)

您可以使用自定义属性修饰派生类:

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

然后,您使用GetCustomAttributes()读取此属性,并使用Activator.CreateInstance()创建实例,并将类型传递给它。