2017-05-23 3 views
-1

この3つのクラス構造は私のコードの簡略図である。カスケードクラスのプロパティvb.net

基本クラス:

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から継承した "x"メンバーを、内部クラスBから "prop"を呼び出すことで埋め込むことはできますか?あなたが設定

答えて

0

C1.InnerB.Prop = 20 

それは実際にあなたがそれにアクセスする

C1.Test() 

を呼び出すと

C1.InnerB.x = 20 

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 

を上書きを呼び出す必要がありますしかし、あなたは何をしているかされて....

+0

奇妙あなたの答えをありがとう、私の例では動作しますが、私の実際のコードでは動作しません.Cクラスには実際に多くの内部クラスが含まれていますすべてAクラスから継承されています。私が何をしているのかを説明するために、基本的にORMです。クラスAはデータベース接続マネージャを表します(レコードセットとmovenext/previousメソッドなどを含みます)。各Bクラスはデータベーステーブルを表し、各プロパティはフィールドを表します。 Cクラスはすべてのデータベーステーブルを含むオブジェクトです。このクラスを使用して、複数のテーブルでsql "SELECT"要求を管理します。あなたが言ったように、多分それは "奇妙"であり、別の論理が存在するかもしれない。 – kloug

+0

@klougもっとお手伝いできないのなら、すみません。問題の内容を理解するのは少し難しいです。 –

+0

私は解決策を見つけました。問題は実際に内部クラスから外部クラスメンバーにアクセスする方法でした。このスレッドは私を助けました[リンク](https://stackoverflow.com/questions/8692475/how-to-get-a-value-inside-parent-class-from-child-class-in-nested-classes) – kloug

関連する問題