andrey.shedko
andrey.shedko

Reputation: 3238

Class and Class Property VB.NET

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

Answers (3)

Ronny Jakobsson
Ronny Jakobsson

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

andrey.shedko
andrey.shedko

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

ElektroStudios
ElektroStudios

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

Related Questions