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))
{
// Парсинг муваффақ шуд
}