Kopiowanie obiektów

0

Witam mam taki oto fragment kodu:

static Odcinek[,] dlugosc = new Odcinek[10, 10];
static Odcinek[,] dluwszy = new Odcinek[10, 10];
        
       
        static void PunktyIOdleglosci()
        {
            dlugosc[0, 0] = new Odcinek();
            dlugosc[0, 1] = new Odcinek();
        }

Mój problem polega na tym, że chcę, aby po utworzeniu obiektów "dlugosc", obiekty "dluwszy" przyjeły taką samą wartość ja te z "dlugosc".

Próbowałem tak:

static void PunktyIOdleglosci()
        {
            dlugosc[0, 0] = new Odcinek();
            dlugosc[0, 1] = new Odcinek();
            dluwszy=dlugosc;
        }

Ale wtedy jeśli zmienie jakąś watrość w "dluwszy", to powoduje to również zmiane w "dlugosc" bo jak wyczytalem: "określiliśmy, że obydwa obiekty wskazują na to samo miejsce w pamięci, a więc każda zmiana danych wskazywanych przez jeden z obiektów, powoduje zmianę danych wskazywanych przez drugi (jest to oczywistem, ponieważ są to te same dane)."
Jak więc można skopiować do obiektu "dluwszy" dane z "dlugosc", aby poźniejsza ich zmiana, nie zmieniała watrości w obu obiektach?? Nie wiem czy zabardzo nie zamotałem...

0

Po prostu po utworzeniu drugiego obiektu 'dluwszy' przepisać do niego wartości z 'dlugosc', zamiast przypisywać drugi obiekt.

0

chodzi ci o to??
static Odcinek[,] dlugosc = new Odcinek[10, 10];
static Odcinek[,] dluwszy = dlugosc;

wtedy też oba mają ten sam adres w pamięci

0

Spróbuj metody Clone():

        private class Odcinek
        {
            public string text;
            public Odcinek(string InitialText)
            {
                text = InitialText ;
            }           
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Odcinek[] dlugosc = { new Odcinek("First Val") };
            Odcinek[] dluwszy = (Odcinek[]) dlugosc.Clone();
            dlugosc[0] = new Odcinek("Second Val");                       
            MessageBox.Show (dlugosc[0].text + " " + dluwszy[0].text);            
        }
0

clonowanie świetnie sprawdza się jeśli chodzi o pojedyncze obiekty, stosy, kolejki, czy coś podobnego, ale jeśli mam obiekt, będący tablicą dwu wymiarową, to już gorzej :(

próbowałem też serializacji, ale tu też napotkałem schody mianowicie obiekt serializuje tak:

MemoryStream stream = new MemoryStream();
BinaryFormatter serializer = new BinaryFormatter();
serializer.Serialize(stream, dlugosc);

a zdeserializować chcę tak:

Odcinek[,] odleglosc = (Odcinek[,])serializer.Deserialize(stream);

i tu wyskakuje błąd "Przed ukończeniem analizy napotkano koniec strumienia."

jak to ominąć?? Prosze o pomoc, niedawno przesiadłem się z Delphi, wiec, niewiele kumam o tym C#...

0

przed deserializacja nalezy przewinac streama na poczatek

stream.Seek(0, SeekOrigin.Begin);

Pozdr.

0

skopiowac mozesz uzywajac clone, ale nie na tablicy, tyko na kazdym pojeczynczym jej elemencie.

for po indeksie1
for po indeksie2
tablica2[index1,index2] = tablica1[index1,index2].clone()

1 użytkowników online, w tym zalogowanych: 0, gości: 1