2014-03-30 138 views
0

我尝试动态地将值(Test1)赋值给属性(Wealth),以便根据初始化的类别计算出的值不同。但是我得到的结果都是0.谁能解释我为什么以及如何解决问题。根据已初始化的类将属性赋值给属性

Public Class Class1 
    Private _test1 As Integer 

    Overridable ReadOnly Property Test1 As Integer 
     Get 
      Return _test1 
     End Get 
    End Property 

    Public ReadOnly Property Wealth As Integer 
     Get 
      Dim rnd As New Random 
      Dim val As Integer = rnd.Next(1, 6) 
      Return val * _test1 
     End Get 
    End Property 

End Class 

Public Class Class2 
    Inherits Class1 

    Public Overrides ReadOnly Property Test1 As Integer 
     Get 
      Return 3 
     End Get 
    End Property 

End Class 

初始化:

Public Class Form1 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     Dim t As New Class2 
     MsgBox(t.Wealth.ToString) 
    End Sub 
End Class 

回答

0

不要使用私有变量,你需要引用属性本身。

Public Class Form1 
    Public Class Class1 

    Overridable ReadOnly Property Test1 As Integer 
     Get 
     Return 0 'Default value' 
     End Get 
    End Property 

    Public ReadOnly Property Wealth As Integer 
     Get 
     Dim rnd As New Random 
     Dim val As Integer = rnd.Next(1, 6) 
     Return val * Test1 'Changed! Uses the Property name, so that if it is overridden it uses the new version' 
     End Get 
    End Property 

    End Class 

    Public Class Class2 
    Inherits Class1 

    Public Overrides ReadOnly Property Test1 As Integer 
     Get 
     Return 3 
     End Get 
    End Property 

    End Class 

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    Dim t As New Class2 
    MsgBox(t.Wealth.ToString) 
    End Sub 

End Class 
+0

伟大,exactely我一直在寻找,我甚至明白为什么它不适用于我的情况。干杯! – ruedi

+0

嗨!第一部分工作,但现在在家里,我看到“返回val * Test1”仍然是私有变量。所以这是行不通的。 – ruedi

+0

哪个地方值? “VAL”?这是您的原始代码中的本地定义的随机数。你真的想用这个代码做什么?是否需要一款游戏?因为目前,每次使用“财富”功能时都会返回不同的值。 – SSS

0

听起来像是你需要一个构造函数。

Public Class Class1 
Public Sub New(int As Integer) 
    Me.test1 = int 
End sub 
... 

然后,当你把它声明

Dim t As New Class1(5) 
MsgBox(t.Wealth.ToString) 
+0

我指的是http://stackoverflow.com/questions/2004381​​/overridable-constant的确认回答,并认为有解决方法不使用构造函数或均匀恒定的解决方案。 – ruedi

+0

好的,跟随你的心。不知道这与你的问题有什么关系。 – OneFineDay