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.
TryParsemeetodite rakendamine: meetod tagastabbool, mis näitab parse'i edukust, ning tulemus kirjutatakseout-parameetrisse. Ilmaout-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
}