我有以下课程:
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
实例的对象。
我的意思是BusinessChild1
和BusinessChild2
VisualChild1
和VisualChild2
都是VisualBase
和BusinessBase
,所有这些都是BusinessChild
和VisualChild
继承的。< / p>
问题是:
有没有办法从GetBusinessObject<T>
获取{{1}}的实例,而无需在子类中创建新属性?因为我想处理来自父参考的所有子实例。
到目前为止,我的想法是创建一个名为{{1}}的通用方法并将相应的业务类型传递给它,但我想知道它是否可以自动完成(不通过类型)。
如果不清楚,请向我询问更多信息。
答案 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()
创建实例,并将类型传递给它。