2014-03-30 4 views
0

초기화 된 클래스에 따라 계산 된 값이 다르기 때문에 동적으로 속성()을 속성 (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

위대하고 정확하게 나는 무엇을 찾고 있었는지 심지어 나는 그것이 내 경우에 효과가 없다는 것을 이해한다. 건배! – ruedi

+0

안녕하세요! 첫 번째 부분은 작동하지만 지금은 "Return val * Test1"이 여전히 개인 변수를 가지고 있음을 알 수 있습니다. 그래서 이것은 작동하지 않습니다. – ruedi

+0

어떤 로컬 값이 필요합니까? "발"? 원래 코드에서 로컬로 정의 된 난수입니다. 실제로이 코드로 무엇을하려고합니까? 게임을위한 거니? 왜냐하면 순간에 "부"기능은 사용할 때마다 다른 값을 반환합니다. – 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

관련 문제