2015-11-02 50 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。 - 好,趕快,謝謝。 –