Sobes.tech
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))
{
    // Հաջող վերլուծություն
}