Tablice i parametr out

0

Witam zgodnie z def. parametry oznaczone modyfikatorem "out" nie muszą posiadać wartości przed wysłaniem do metody ale wartość musi zostać do nich przypisana przed opuszczeniem metody do której zostały wysłane.

Wszystko ładnie działa na pojedynczych typach a problem mam przy tablicach mianowicie mam taki kod:

  static void FunWithArray(out int[,] Tab)
    {
        Tab = new int[5, 5]; // Bez tego kompilator wywala błąd
                                     // Że używam Tab który nie ma przypisanej wartości. To musi być czy nie? Oraz, że muszę przypisać przed opuszczeniem metody.
        for (int i = 0; i < 5; i++)
            for (int ii = 0; ii < 5; ii++)
                Tab[i,ii] = -12;
    }
    static void Main()
    {
        int[,] Tab = new int[5, 5];
        FunWithArray(out Tab);

    } 

Może ktoś wyjaśnić?;)

0

Przecież sam to wyjaśniłeś w pierwszym akapicie o_O. Skoro parametr nie musi mieć przypisanego żadnego obiektu, to i nie możesz go użyć przed przypisaniem mu czegoś.

0

ok wiem z czym masz problem. out tutaj odnosi się do referencji na tablicę, a nie do zawartości tablicy. Dając tam out mówisz kompilatorowi, że ta funkcja nada wartość tej referencji (np utworzy nową tablicę).
Jak dasz tam ref to nadal możesz zmienić referencję by wskazywała na inny obiekt, ale możesz założyć, że referencja którą dostałeś już wskazuje na jakąś tablicę.
Słowa kluczowe ref i out mówią, że chcesz mieć możliwość modyfikowania referencji podanej do funkcji. Brak tego słowo kluczowego powoduje powstanie kopii referencji podczas przekazania do funkcji, więc możesz modyfikować zawartość tablicy, ale nie możesz jej podmienić na inną tablicę.

Jeśli chcesz po prsotu wypełnić tablicę to nie potrzebujesz ani 'out ani ref.

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