### The Structure and Class Integration Crisis

This is not as major of a problem, but you should be aware of it. Notice the structures and classes below.
```    Public Structure BipoleS
Public Number As Integer
Public Label As Char
Public Sub New(ByVal L As Char, ByVal N As Integer)
Me.Label = L
Me.Number = N
End Sub
End Structure
Public Class BipoleC
Public Number As Integer
Public Label As Char
Public Sub New(ByVal L As Char, ByVal N As Integer)
Me.Label = L
Me.Number = N
End Sub
End Class
Public Class Tripod
Private bis As BipoleS
Private bic As BipoleC
Public Sub New(ByVal S As BipoleS, ByVal C As BipoleC)
bis = S
bic = C
End Sub
Public Property BipoleStructure() As BipoleS
Get
Return bis
End Get
Set(ByVal Value As BipoleS)
bis = Value
End Set
End Property
Public Property BipoleClass() As BipoleC
Get
Return bic
End Get
Set(ByVal Value As BipoleC)
bic = Value
End Set
End Property
End Class```
The Tripod class contains one structure and one class, exposed through two Property statements. Declarations are as follows:
```        Dim Borealis As BipoleC
Dim Australis As BipoleS
Dim Aurorae As Tripod```
Illustrated below:

We'll initialize them as so:
```        Borealis = New BipoleC("n"c, 4)  'Instantiate the class.
Australis = New BipoleS("p"c, 8)  'Initialize the structure.```

And then the Aurorae class.
```        Aurorae = New Tripod(Australis, Borealis)
'Set the tripod class to have the BipoleS and the BipoleC.```

And then, we change the Australis and Borealis values.
```        Borealis = Nothing
Australis = New BipoleS("A"c, 0)
'Now these values are different.```

Now, the weird part: We can change the value of the Bipole class by way of the Tripod.
```        Aurorae.BipoleClass.Number = 25
Console.WriteLine(Aurorae.BipoleClass.Number)
'This change is executed successfully.
'Roughly equivalent to the following:
Borealis = Aurorae.BipoleClass  'This is a property statement that returns a class reference.
Borealis.Number = 25   'Set the 25 in the class referenced here.```
And everything works as predicted: the value returned to the console is 25.

However, that same line does not work on the Bipole structure.
```        Aurorae.BipoleStructure.Number = 52
'Why won't this work?```
We get a nice error message stating that Aurorae.BipoleStructure.Number is a value and cannot be assigned to. Mainly because what we are trying to do is get the Bipole structure, set its Number property, and then set the Bipole structure to the updated version. Of course, this particular call to the BipoleStructure member cannot be a set and a get. The equivalent would be like this:
```        Australis = Aurorae.BipoleStructure  'Get.
Australis.Number = 52   'Set the value in Australis.
'This does not set the bipole structure inside of the Aurorae reference.
'Because Australis is merely a copy of the version in Aurorae.```

In order to complete this operation, we'd have to reassign Australis to the Aurorae.BipoleStructure.
```        Aurorae.BipoleStructure = Australis  'Set.  Finally.
'Now the operation is complete.```
Now, this setting is complete.

Why does
`        Aurorae.BipoleStructure.Number = 52`
raise an error? Because it is equivalent to the two lines:
```        Australis = Aurorae.BipoleStructure  'Get.
Australis.Number = 52   'Set the value in Australis.```
Which do not change the value of Aurorae.BipoleStructure. The error is VS.NET's way of telling you that this makes no sense.
Why does Aurorae.BipoleClass.Number = 25 work? Because Aurorae.BipoleClass is a reference to the New BipoleC("n"c, 4), the same reference as the one that was in Borealis. So, when we change the number to 25 here, the change is reflected instantly due to the 'class reference'.

Have fun with classes and structures!