级联类属性vb.net

级联类属性vb.net,vb.net,Vb.net,此3类结构是我的代码的简化视图: 基类: Public Class A Public x As Integer Protected Function G() as Integer Return x End Function Protected Sub S(value as Integer) x = value End Sub Public Function Test() Return x +

此3类结构是我的代码的简化视图:

基类:

Public Class A

    Public x As Integer

    Protected Function G() as Integer
       Return x
    End Function

    Protected Sub S(value as Integer)
         x = value
    End Sub

    Public Function Test()
         Return x + 10
    End Function

End Class
子类:

Public Class B

    Inherits A

    Public Property Prop As Integer
        Get
            Return G()
        End Get
        Set(ByVal Value As Integer)
            S(Value)
        End Set
    End Property

End Class

Public Class C

    Inherits A

    Public InnerB As New B

End Class
目标是能够编写这样的代码:

Dim B1 as New B
Dim C1 as New C

B1.Prop = 10
C1.InnerB.Prop = 20 'the "x" member inherited from A takes the value 20 for the InnerB object but not for the C1 object.

MsgBox(B1.Test()) ' returns 20. Works!
MsgBox(C1.Test()) 'returns 10 instead of 30.
是否可以通过从C的内部类B调用“prop”来填充从C继承的“x”成员?

当您设置

C1.InnerB.Prop = 20
确实如此

C1.InnerB.x = 20
当你打电话的时候

C1.Test()
它将访问

C1.x
而不是

C1.InnerB.x
你需要打电话

MsgBox(C1.InnerB.Test()) 
或重写测试功能

Public Class C
    Inherits A

    Public InnerB As New B

    Public Overrides Function Test()
         Return InnerB.Test()
    End Function

End Class

但你正在做的是。。。。奇怪的

谢谢你的回答,它适用于我的示例,但不适用于我的真实代码:C类实际上包含许多内部类,并且都继承自A类。为了解释我在做什么,它基本上是一个ORM。类A表示数据库连接管理器(包含记录集和movenext/previous方法等…)。每个B类表示一个数据库表,每个属性表示一个字段。C类是一个包含所有数据库表的对象,我使用这个类来管理几个表上的sql“SELECT”请求。就像你说的,也许这很“奇怪”,可能还有另一种逻辑。@kloug如果我不能帮你更多的话,我很抱歉。有点难理解问题是什么。好的,我找到了解决办法。问题实际上是如何从内部类访问外部类成员。这根线帮助了我