Middle
Ինչու են C#-ում ավելացվել ref և out բանալի բառերը հղումային տիպերի համար:
sobes.tech AI
Պատասխան AI-ից
Չնայած հղման տիպերը փոխանցվում են հղումով (հղման պատճենը փոխանցվում է), ref կամ out օգտագործումը թույլ է տալիս փոխանցել հղումը ինքնին հղումով:
Սա կարող է օգտակար լինել հետևյալ դեպքերում՝
- Օբյեկտի օրինակին փոփոխություն կատարելը՝ թույլ է տալիս մեթոդին փոխել այն, թե որ օրինակին է հղում փոփոխական-պարամետը, նշանակելով նոր օրինակ:
TryParseմեթոդների իրականացման ժամանակ՝ մեթոդը վերադարձնում էbool, որը ցույց է տալիս, արդյոք վերլուծությունը հաջող էր, և արդյունքը գրանցվում էoutպարամետրում։outբացակայի դեպքում, անհրաժեշտ է նետել արտահայտություն՝ ձախողության դեպքում (որը միշտ ցանկալի չէ), կամ վերադարձնել տիպեր։- արդյունավետություն (անհատական դեպքերում, բայց հնարավոր է)՝ որոշ ծայրահեղ դեպքերում, եթե օբյեկտը շատ մեծ է և հաճախ պետք է փոխարինվի մեթոդի ներսում, փոխանցումը հղումով (
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))
{
// Հաջող վերլուծություն
}