Sobes.tech
Middle

Miks C#-s on sisse viidud võtmesõnad ref ja out viidetüüpide jaoks?

sobes.tech AI

Vastus AI-lt

Kuna viitamisliigid edastatakse viitega (koopia viitest), võimaldavad ref või out otse edastada viidet objekti poole.

See võib olla kasulik järgmistel juhtudel:

  • Objekti eksemplari muutmine: võimaldab meetodil muuta, millisele objekti eksemplarile viitab muutujaargument, määrates talle uue eksemplari.
  • TryParse meetodite rakendamine: meetod tagastab bool, mis näitab parse'i edukust, ning tulemus kirjutatakse out-parameetrisse. Ilma out-parameetrita oleks vaja kas visata erind või tagastada tükid.
  • Tõhusus (harva, kuid võib juhtuda): teatud äärmuslikel juhtudel, kui objekt on väga suur ja seda on sageli vaja meetodis asendada, võib viite edastamine (ref) olla veidi tõhusam kui uue objekti tagastamine (kuid see on haruldane).

Näide ref kasutamisest objekti asendamiseks:

public class MyClass
{
    public int Value { get; set; }
}

public void ReplaceObject(ref MyClass obj)
{
    obj = new MyClass { Value = 10 }; // Muudame, millele obj viitab
}

// ... teises kohas koodis
MyClass instance = new MyClass { Value = 5 };
ReplaceObject(ref instance);
// Nüüd viitab instance uuele objektile väärtusega 10

Näide out kasutamisest:

public bool TryParseInt(string s, out int result)
{
    // Parsimise loogika
    if (int.TryParse(s, out result))
    {
        return true;
    }
    result = 0; // Määrame vaikimisi väärtuse ebaõnnestumise korral
    return false;
}

// ... teises kohas koodis
int parsedValue;
if (TryParseInt("123", out parsedValue))
{
    // Edukas parse
}