Jump to content
Xtreme .Net Talk

Recommended Posts

Posted (edited)

OK i have a 3 classes (Chessboard, NumericBoard, Dictator) and all 3 have one common property... Pieces as PieceListBase (actually each class has a different propert(1 PieceListBase, 1 PieceListNumeric, 1 PieceListGUI) PieceLIstBase is an abstract class that inherits from ArrayList and the other 2 PieceLists inherit from the base

 

The Dictator takes a PieceListGUI and converts it to a PieceListNumeric

 

Somehow after i make the conversion the values end up applying to all instances of the PieceList classes.

ie. i'm converting the location value for each piece in the pieceListGUI to a new value and setting PieceListNumeric to my converted class (i use a function to do this)

 

The values are passed ByVal and i can't seem to find how these values are accumulating like they do... (i end up with an arithmatic overflow eventually)

 

which FINALLY brings me to my question...

Could the Base Class for my PiecesList have something to do with this? i'm posting some of the code

 

The overflow occurs in the ConvertToNumeric Function

 

HEEEEEEEEELP i'm gonna lose my mind

'chessboard class
       Protected Overrides Sub OnMouseDown(ByVal e As System.Windows.Forms.MouseEventArgs)

           Dim squareIndex As Short

           squareIndex = GetCurrentSquare(e)
           myCursor.State = True
           mDictator = New MasterDictator(mPieces)
           If Not IsNothing(mSquare(squareIndex).Image) AndAlso mDictator.PieceGrabbedIsLegal() Then

               myCursor.Image = mSquare(squareIndex).Image
               myCursor.Rectangle = New Rectangle(e.X, e.Y, iSize, iSize)
               'add previous square variable?
               mSquare(squareIndex).Image = Nothing
               Me.Refresh()
           Else
               myCursor.State = False
           End If

       End Sub

'MasterDictator class
 Public Sub New(ByVal hostPieces As PieceListBase)

           MyBase.New()
           MyBase.Pieces = MyClass.ConvertToNumeric(hostPieces)
          
       End Sub

Private Function ConvertToNumeric(ByVal myPieces As PieceListBase) As PieceListNumeric
           'converts the locations of the pieces to the corresponding index of mNumeric.Square(x)
           Dim aPiece As Piece
           Dim numericPieces As New PieceListNumeric()

           For Each aPiece In myPieces
               If Not aPiece.Rank = Rank.Abstract Then
                   aPiece.Location = aPiece.Location + 26 + (4 * ((aPiece.Location \ 8) + 1) - 1)
                   'what in TARNATION
                   numericPieces.Add(aPiece)
                   'numericPieces.Item(aPiece.Index) = aPiece
               End If
           Next
           Return numericPieces
       End Function

Edited by PlausiblyDamp
i'm not lazy i'm just resting before i get tired.
Posted

wow, i feel like an idiot. and to think i thought i was solid on that for years now.

 

Well you know that sucks really bad

You obviously see what i'm trying to do here so here's my stab at fixing it let me know what you think...

 

instead of passing the true value.... create a new value and send that one to the method instead.

 

ie.

Public Some Sub()

Dim myClassesProperty as ArrayList

 

Dim myValueToPass as ArrayList

 

'statements

 

myvalueToPass = myClassesProperty

 

myConverterSub(myValueToPass) 'now myClassProperty won't be effected.

End Sub

i'm not lazy i'm just resting before i get tired.
Posted

Try using the Arraylist.Clone method. This only does a shallow copy, but you can override the implementation, seeing that you've inherited from it, if you need to......

thus, with your above example you only need to do:

myConverterSub(myClassesProperty.Clone()) 

Howzit??
Posted

can you enlighten me to this term shallow copy (i've seen clone and always wondered why it was usefull, now it all comes together :) )

 

 

thanks alot

i'm not lazy i'm just resting before i get tired.
Posted (edited)

To quote help:

A shallow copy of a collection copies only the elements of the collection, whether they are reference types or value types, but it does not copy the objects that the references refer to.

If you got 'complex' objects (objects that holds other objects(reference types) as properties), then you will need to exstent on the Clone function. (Make sure these other objects also gets copied)

Edited by Cywizz
Howzit??
Posted

ahh yes... i had read the help... thanks for putting that in laymans terms. i have trouble decoding these help files at times. one of you guys should write a book on using microsoft help lol

 

yes they are 'complex' objects... that's what i was afraid that line meant lol i was hoping for a little less work :)

 

thanks alot for the help

i'm not lazy i'm just resting before i get tired.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...