VB.Net 中的组合和继承

Composition and inheritance in VB.Net

原来是这样。我有 class A 和 B。Class A 中有一个成员是 Class B

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)创建派生的 class。我希望成员 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 

将在基 class 中创建一个(B 的)完整列表,该列表永远不会被使用!

您始终可以自由地将任何您想要的成员放入基础 classes 和派生 classes 中;没有什么能阻止你这样做。如何使用这些 classes 取决于您。如果您 需要 A class 中的 B 个实例的集合,那很好,或者如果您需要 DB class在DA中,也很好。

您还可以对其进行编码,以便在将 DB 的实例添加到 DA class 中的集合时,将该实例添加到base class' (A) 集合,这是可以的,因为 DB 派生自 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

那么你只会在基础 class A.

中存储一个集合

这完全取决于您希望如何使用您的 class -- 您对设计的具体需求是什么。