Keresés

Új hozzászólás Aktív témák

  • Lortech

    addikt

    válasz Lakers #1002 üzenetére

    Ez itt valami példa lenne gondolom a referencia és az érték szerinti paraméterátadások ill. annak mellékhatásainak szemléltetésére.

    Value metódus - érték szerinti-
    Reference metódus - referencia szerinti paraméterátadás.

    Value metódusban a bemenő paraméter int típus, "érték típus", ha hivatkozol rá a változónévvel, akkor az értékre hivatkozol (nem referenciára).
    Ha megváltoztatod a metóduson belül a "param" bemenő paramétert, nem változik meg a Value függvény hívása helyén megadott változó, mivel a metódus annak egy másolatát kapja meg valójában.

    (Value hívását nem másoltad be, de gondolom ott lehet a könyvben vmi ilyesmi példa is, hogy:

    WrappedInt wi = new WrappedInt();
    Console.WriteLine(wi.Number);
    Pass.Value(wi.Number);
    Console.WriteLine(wi.Number);

    )

    A Reference metódus egy referencia típust vár bemenő paraméterként, a típus a WrappedInt. A példában a Reference metódus hívása helyén a WrappedInt osztály
    "wi" nevű objektumpéldányát, ill. annak referenciáját adja át a metódusnak, tehát az eredetileg WrappedInt wi = new WrappedInt(); sorral példányosított objektumra képes hatni, ahogy teszi is az objektum "Number" mezőjének megváltoztatásával.

    Konkrétan a kérdésedre válaszolva:
    1, mert a Reference fgv formális paraméterlistája a"WrappedInt param", tehát nem int típust vár a fgv, ha a Numbert adta volna át, azzal nem tudta volna szemléltetni a referencia szerinti paramátadást.
    2, szóval param.Number = 42;
    param a bemenő paraméter, típusa WrappedInt, ami egy osztály, referencia típus, tehát konkrétan param az ugyanaz az objektum, ill referenciája, mint amit a WrappedInt wi = new WrappedInt(); sorral példányosítottál.
    A WrappedInt egyetlen mezője a Number, példányszintű és publikus, ezért hivatkozhatsz rá a példában megadott módon param.Number-ként. A mezőnek egyszerűen értéket adunk.

Új hozzászólás Aktív témák