2015-11-02 54 views
0

所以情况就是如此。我有A类和B类中有一个成员是B类VB.Net中的组合和继承

Public Class A 
    public _lstB as list (of B) 
    public sub new() 
     _lstB = B.Init() 
    end sub 
end Class 

Public Class B 
    public shared sub Init() as list (of B) 
     .... 
    end sub 
End Class 

没有什么,我想要做的是创造了A和B的派生类(可以说DA和DB)。我希望成员B在DA中替换为DB。这可能吗?

Public Class DA 
    inherits A 
    public _lstDB as list (of DB) 

    public sub new() 
     mybase.new 
     _lstDB = DB.Init() 
    end sub 
end Class 

Public Class DB 
    inherits B 
    public shadows shared sub Init() as list (of DB) 
     .... 
    end sub 
End Class 

我完全确信这是要走的路,因为在号召

mybase.new 

整个列表(B)的会在基类中,将永远不会被创建endup被使用!

+0

您的代码在DA和DB中不显示任何派生。 –

+0

您可以创建一个基类,它具有A和DA的通用属性和方法,那么它们都可以根据需要继承B或DB。或者使基本通用,所以你指定B或数据库为T – Plutonix

回答

1

你总是可以随意在基类和派生类中放置你想要的任何成员;没有什么能阻止你这样做。你想如何使用这些类是由你决定的。如果你需要A类中B个实例的集合,那很好,或者如果你需要在DA中收集DB类,那也没关系。

,这样当您要添加的DB实例您在DA类有收藏,您实例添加到基础类(A),收集这是因为DB导出OK你也可以编写起来从B。举例来说,如果你有A此方法:

Public Overridable Sub AddNew(item As B) 
    _lstB.Add(item) 
End Sub 

而且这种方法在DA

Public Overrides Sub AddNew(item As B) 
    MyBase.AddNew(item) 
End Sub 

这样,你就永远只能存储一个集合,在基类A

这一切都取决于你想如何使用你的班级 - 你的具体需求是什么为你的设计。

+0

'和这个方法在B:'你的意思是在DA我猜。但是,OP可能需要一种方法来确保在DA的_lstB中所有项*必须是DB类型,因此不允许向DA添加B-not-DB? –

+0

@ A.S.H。 - 好,赶快,谢谢。 –