2010. május 12., szerda

Egy vagy kettő?

public int GetInteger()
{
    int result;
    try
    {
        result = 1;
        return result;
    }
    finally
    {
        result = 2;
    }
}

7 megjegyzés:

  1. a return azért nagy úr
    VálaszTörlés
  2. Itt a finally nagyobb úr :)
    public Product GetInteger()
    {
    Product result = new Product();
    try
    {
    result.ID = 3;
    return result;
    }
    finally
    {
    result.ID = 2;
    }
    }
    VálaszTörlés
  3. Ez azért nem annyira bonyolult. A teljes return sor kiértékelődik, majd a finally fut le. Mivel a result value típus, ezért a finally nem a viszaadandó másolatot módosítja.

    surex példájában is ugyanaz a lefutás van, csak ott persze a hívó már az ID=2-t fogja látni, de a return értéken, azaz a referencián nem változtat a finally.

    Tök jók ezek a kis fejtörők! Még! :))
    VálaszTörlés
  4. Na és vajon string-et választva, ami ugye referencia típus, miért mégis a return akarata érvényesül? :)
    VálaszTörlés
  5. Referencia típusnál is mindig ugyanaz a példány lesz visszaadva (a fenti példánál maradva, a finally-ban egy result = new Product() "hatástalan" lenne), viszont az adott referencia által mutatott példány tulajdonságai módosíthatóak.
    A string-nél - mivel a .NET-ben immutable - ez merőben teoretikus lehetőség. :)
    VálaszTörlés
  6. 1. Egyértelmű :)
    VálaszTörlés