Sobes.tech
Middle

Чаро калидвораҳои ref ва out барои намудҳои истинодӣ дар C# ворид карда шуданд?

sobes.tech AI

Ҷавоб аз AI

Ҳарчанд навъҳои ишоракунӣ тавассути ишора (нусхаи ишора дода мешавад) гузаронида мешаванд, истифодаи ref ё out имкон медиҳад, ки худи ишора ба объект тавассути ишора гузаронида шавад.

Ин метавонад дар ҳолатҳои зерин муфид бошад:

  • Тағйир додани намунаи объект: имкон медиҳад, ки усул тағйир диҳад, ба кадом намунаи объект ишора мекунад, бо таъин кардани намунаи нав.
  • Иҷрои усулҳои TryParse: усул bool бармегардонад, ки нишон медиҳад, ки парсинг муваффақ буд ё не, ва натиҷа дар аргументи out навишта мешавад. Бе out, бояд дар ҳолати нокомӣ истисно партофтан ё tuple баргардондан.
  • Самаранокӣ (кам, аммо имконпазир): дар баъзе ҳолатҳои шадид, агар объект хеле калон бошад ва бояд дар дохили усул зуд-зуд иваз шавад, гузаронидани тавассути ишора (ref) метавонад каме самараноктар бошад, дар муқоиса бо баргардонидани объект нав (гарчанде ин сценарий камёб аст).

Масалан барои истифодаи ref барои иваз кардани намуна:

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

public void ReplaceObject(ref MyClass obj)
{
    obj = new MyClass { Value = 10 }; // Иваз кардани ишора ба объект
}

// ... дар ҷои дигар
MyClass instance = new MyClass { Value = 5 };
ReplaceObject(ref instance);
// Акнун, instance ба объекти нав бо Value = 10 ишора мекунад

Масалан барои истифодаи out:

public bool TryParseInt(string s, out int result)
{
    // Логикаи парсинг
    if (int.TryParse(s, out result))
    {
        return true;
    }
    result = 0; // Қиймати пешфарзро дар ҳолати нокомӣ таъин мекунад
    return false;
}

// ... дар ҷои дигар
int parsedValue;
if (TryParseInt("123", out parsedValue))
{
    // Парсинг муваффақ шуд
}