Reputation: 3238
I'm stuck with te follow. I create class with some property fields as follow:
Public Class Room1
Private _AdultNumber As Byte
Property AdultNumber() As Byte
Get
Return _AdultNumber
End Get
Set(value As Byte)
_AdultNumber = value
End Set
End Property
When I call this class and pass some value to the property, I expect that New class constructor create for me new instance of the class with empty property fields, but instead, I got same class with property values that I pass before.
Here how I call class on PageLoad.
Dim r1 As New Room1
r1.AdultNumber = CByte(ddlAdRoom1.SelectedItem.Value)
And then I need to read this value from other class.
Dim r1 As New Room1
Dim x As Byte = r1.AdultNumber
How should I change code to get this result:
1. Set property value to new class instance with empty property value?
2. Get stored Room1 Class value from any other Class or Page Method?
Upvotes: 0
Views: 3421
Reputation: 1
There is no point in writing the same class several times. The simpler solution is below.
Public Class ClassRoom
Public Sub New()
Me.AdultNumber = -1
Me.ChildNumber = -1
Me.Ages = ""
End Sub
Public Property AdultNumber As Integer
Public Property ChildNumber As Integer
Public Property Ages As String
End Class
Public Class Rooms
'Shared class
Public Shared Property Room1 As New ClassRoom
Public Shared Property Room2 As New ClassRoom
Public Shared Property Room3 As New ClassRoom
Public Shared Property Room4 As New ClassRoom
End Class
Public Class ClassRooms
'Declared class
Public Property Room1 As New ClassRoom
Public Property Room2 As New ClassRoom
Public Property Room3 As New ClassRoom
Public Property Room4 As New ClassRoom
End Class
Public Module Module1
Public AllRooms As New ClassRooms
Public Sub Main()
If Rooms.Room1.AdultNumber < 0 Then Rooms.Room1.AdultNumber = 1
If Rooms.Room2.AdultNumber < 0 Then Rooms.Room2.AdultNumber = 2
If Rooms.Room3.AdultNumber < 0 Then Rooms.Room3.AdultNumber = 3
If Rooms.Room4.AdultNumber < 0 Then Rooms.Room4.AdultNumber = 4
If AllRooms.Room1.AdultNumber < 0 Then AllRooms.Room1.AdultNumber = 5
If AllRooms.Room2.AdultNumber < 0 Then AllRooms.Room2.AdultNumber = 6
If AllRooms.Room3.AdultNumber < 0 Then AllRooms.Room3.AdultNumber = 7
If AllRooms.Room4.AdultNumber < 0 Then AllRooms.Room4.AdultNumber = 8
Debug.Print(Rooms.Room1.AdultNumber)
Debug.Print(Rooms.Room2.AdultNumber)
Debug.Print(Rooms.Room3.AdultNumber)
Debug.Print(Rooms.Room4.AdultNumber)
Debug.Print(AllRooms.Room1.AdultNumber)
Debug.Print(AllRooms.Room2.AdultNumber)
Debug.Print(AllRooms.Room3.AdultNumber)
Debug.Print(AllRooms.Room4.AdultNumber)
End Sub
End Module
Upvotes: 0
Reputation: 3238
I finally solved this by using the following:
Imports Microsoft.VisualBasic
Imports System.ComponentModel
Public Class Rooms
Public Class Room1
Public Sub New()
Room1.AdultNumber = Nothing
Room1.ChildNumber = Nothing
Room1.Ages = Nothing
End Sub
<Bindable(True), DefaultValue(False)>
Public Shared Property AdultNumber As Byte = 0
<Bindable(True), DefaultValue(False)>
Public Shared Property ChildNumber As Byte = 0
<Bindable(True), DefaultValue(False)>
Public Shared Property Ages As String() = Nothing
End Class
Public Class Room2
Public Sub New()
Room2.AdultNumber = Nothing
Room2.ChildNumber = Nothing
Room2.Ages = Nothing
End Sub
<Bindable(True), DefaultValue(False)>
Public Shared Property AdultNumber As Byte = 0
<Bindable(True), DefaultValue(False)>
Public Shared Property ChildNumber As Byte = 0
<Bindable(True), DefaultValue(False)>
Public Shared Property Ages As String() = Nothing
End Class
Public Class Room3
Public Sub New()
Room3.AdultNumber = Nothing
Room3.ChildNumber = Nothing
Room3.Ages = Nothing
End Sub
<Bindable(True), DefaultValue(False)>
Public Shared Property AdultNumber As Byte = 0
<Bindable(True), DefaultValue(False)>
Public Shared Property ChildNumber As Byte = 0
<Bindable(True), DefaultValue(False)>
Public Shared Property Ages As String() = Nothing
End Class
Public Class Room4
Public Sub New()
Room4.AdultNumber = Nothing
Room4.ChildNumber = Nothing
Room4.Ages = Nothing
End Sub
<Bindable(True), DefaultValue(False)>
Public Shared Property AdultNumber As Byte = 0
<Bindable(True), DefaultValue(False)>
Public Shared Property ChildNumber As Byte = 0
<Bindable(True), DefaultValue(False)>
Public Shared Property Ages As String() = Nothing
End Class
Public Class Room5
Public Sub New()
Room5.AdultNumber = Nothing
Room5.ChildNumber = Nothing
Room5.Ages = Nothing
End Sub
<Bindable(True), DefaultValue(False)>
Public Shared Property AdultNumber As Byte = 0
<Bindable(True), DefaultValue(False)>
Public Shared Property ChildNumber As Byte = 0
<Bindable(True), DefaultValue(False)>
Public Shared Property Ages As String() = Nothing
End Class
End Class
Upvotes: 0
Reputation: 20464
In your main class, declare the Room1
class as Public
(Outside any procedure):
Public class MainClass
...
Public r1 As New Room1
...
Private Sub SetMember()
...
Me.r1.AdultNumber = CByte(ddlAdRoom1.SelectedItem.Value)
...
End Sub
End Class
In your secondary Classes you can retrieve the previously set member like this:
Public Class Class2
...
Private x As Byte = MainClass.r1.AdultNumber
...
Private Sub GetMember()
...
Dim x As Byte = MainClass.r1.AdultNumber
...
End Sub
End Class
Upvotes: 1